UiButton / IBAction - ссылка из RootView на mainView в раскадровке - PullRequest
1 голос
/ 17 ноября 2011

Я пытаюсь назвать основной ViewController на моей раскадровке.В моем приложении есть дополнительный файл .h, .m без xib или раскадровки.

В этом файле .m T создана кнопка:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(home:)forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[self.view addSubview:button];
NSLog(@"Home-Button line 645");

Эта кнопка должна ссылатьсяна мой основной ViewController в раскадровке.Представление имеет идентификатор HauptMenu.Я не получил ошибку, но представление не меняется на мой основной ViewController.Что не так?

    - (IBAction)home:(id)sender {
    NSLog(@"Button was tapped");
    ViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"];

    NSLog(@"1");
    [viewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    NSLog(@"2");
    [self.navigationController pushViewController:viewController animated:NO];
    [viewController release];
    NSLog(@"3");

}

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Если ваш .m файл не связан ни с одной раскадровкой, self.storyboard не будет Nil?

Попробуйте:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
                               @"MainStoryboard" bundle:[NSBundle mainBundle]];
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"];

Обязательно измените storyboardWithName: на имя вашей раскадровки.


Возможно, вы не получили никаких ошибок, потому что Objective-C обрабатывает ноль иначе, чем другие языки, он (обычно) не будет выдавать исключение, если вы попытаетесьвызовите метод для nil, он просто вернет nil.Следующий код будет успешно запущен без ошибок компиляции или времени выполнения:

UIViewController * test = nil;
[test viewDidLoad];

NSString * storyBoardName;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    storyBoardName = @"MainStoryboard_iPad";
} else {
    storyBoardName = @"MainStoryboard_iPhone";
}
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
                                   storyBoardName bundle:[NSBundle mainBundle]];
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"];
0 голосов
/ 22 марта 2012

У меня была эта проблема сама.Благодаря этому ответу теперь он работает !!

Вот мой код, надеюсь, кто-то еще может использовать это:

 // Declare the storyboard
 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];

 // Declare the next view controller
 NextViewController *nextViewController = [storyboard instantiateViewControllerWithIdentifier:@"NextViewController"];

 // Pass value
 nextViewController.result = result;
 [currentObject memberfunction:value];

 // Define transition
 nextViewController.modalTransitionStyle=UIModalTransitionStyleCoverVertical;

 // Perform change
 [self presentModalViewController:nextViewController animated:YES];
...