2012-06-21 3 views
3

Привет, я создаю кнопку программно, и я подключаю свою кнопку к другому виду, но у меня возникла проблема , что я должен использовать метод prepareForSegue для раскадровки, но я не знаю, как это сделать в Интернете, но Я получу ошибку, когда я использовал этот образец, не могли бы вы мне помочь?use prepareForSegue для кнопки

Заранее благодарим!

вот мой код

Создание кнопки

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0]; 
     button.tag = currentTag; 
     currentTag++; 
     [button.layer setBorderColor: [[UIColor blackColor] CGColor]]; 
     [button.layer setBorderWidth: 1.0]; 
     [button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal]; 
     button.frame = CGRectMake(80*x, 32*y, 80, 32); 
     [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [buttonView addSubview: button]; 

Действие для кнопки

-(void)buttonPressed:(UIButton *)button 
{ 
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame)); 
WeekView *crtObj=[[WeekView alloc]initWithNibName:@"WeekView" bundle:nil]; 
[self.navigationController pushViewController:crtObj animated:YES]; 
[crtObj release]; 


} 

Подготовка к Segue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"WeekView"]) { 

     // Get reference to the destination view controller 
     WeekView *vc = [segue destinationViewController]; 

     // Pass any objects to the view controller here, like... 
     [vc setMyObjectHere:object]; //// I don't know what should I write instead of object 
    }} 

ошибка

enter image description here

Edit 2: **** У меня есть предупреждение:

перетекает инициирована непосредственно из контроллеров отображения должен иметь идентификатор для использования с - [UIViewController performSegueWithIdentifier: отправитель:]

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"WeekView"]) { 

     // Get reference to the destination view controller 
    // WeekView *vc = [segue destinationViewController]; 

     // Pass any objects to the view controller here, like... 
     // [vc setMyObjectHere:object]; 
    [segue.destinationViewController setTitle:@"WeekView"]; 
    }} 
+0

Проверить это: http://stackoverflow.com/questions/7595374/ios-5-segue-implementation – san

ответ

11

Есть действительно два способа протолкнуть контроллер представления на навигационном контроллере.

  1. Старый способ, все в коде. Это то, что вы сделали. На этом этапе вы можете полностью забыть о segues.

  2. Новый способ: установить Segue в Storyboard (нажать сеге из одного контроллера вида на новый контроллер вида, который вы также определяете в Storyboard), дать ему имя Identifier, а затем использовать этот код, чтобы нажать контроллер вида ,

.

[self performSegueWithIdentifier:myIdentifyer sender:self]; 

где self является контроллером вида. Теперь вы можете выполнить настройки в prepareForSegue:.

+0

спасибо, теперь я предупреждаю, что я положил его выше –

4

пример кода в этом случае просто говорит вам тип вещи, которую вы можете сделать в prepareForSegue:sender:.

Предполагается, что viewController, к которому вы пытаетесь выполнить segue, будет иметь метод setMyObjectHere:, и он ожидает, что вы передадите этот объект. В качестве примера у вашего класса может быть setTitle:, а в коде prepareForSegue:sender: вы можете предварительно установить заголовок на основе информации в контроллере, с которого выполняется сеанс.

, чтобы избавиться от этого предупреждения, вам нужен идентификатор, так как на картинке ниже:

enter image description here

+0

спасибо теперь у меня есть предупреждение Я положил его выше –

+0

добавил фотографию, чтобы показать вам, где добавить идентификатор, чтобы избавиться от предупреждения. –

0

«Старый способ кодирования», не лучший способ кодирования, надеюсь, это помогает, но если вы используете программные UIButtons и UIViews, вы даже не должны использовать segues.

Создайте элемент управления корневым элементом в делегате приложения, чем просто нажмите и выключите следующие контроллеры просмотра и т. Д.

Например, это все, что вам нужно в вашем viewcontrollers:

-(void)nextControllerButton:(UIButton*)button{ 

    SearchViewController *nextController = [[SearchViewController alloc] init]; 

    nextController.username = _username.text; 
    nextController.password = _password.text; 

    [self.navigationController showViewController:nextController sender:self]; 
} 
Смежные вопросы