2013-05-22 5 views
0

Мне нужно создать программный код UIToolbar и UIBarButtonItem. Я использую Storyboard для макета. Как теперь открывается новый вид, нажав кнопку на панели инструментов, которая была запрограммирована программой? (Я знаю, как это сделать с Segue, когда кнопка создана в интерфейсе Builder, но я не могу использовать этот подход здесь).UIBarButtonItem открыть новый вид при использовании раскадровки

+0

Какую презентацию вы хотите? Modal? От себя? – MJN

+0

Я бы использовал модальную презентацию. – JFS

ответ

1

Прежде всего, создайте UIBarButtonItem используя следующий код:

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonItemStylePlain target: self action: @selector(showNewView)]; 

Затем

-(void)showNewView 
{ 
    UIStoryboard *story =[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
    UIViewController *newViewController = [[postDetailViewControllerIphone alloc]init]; 
    newViewController=[story instantiateViewControllerWithIdentifier:@"newView"]; 
    [self presentViewController:newViewController animated:YES completion:nil]; 

}

Этот код позволит barButtonItem открыть новый просмотрите контроллер.

Если вы не добавили barButtonItem на панель инструментов, сделайте это после создания barButtonItem.

NSArray *toolBarItems = [[NSArray alloc] initWithObjects:barButtonItem,nil]; 
[self.toolBar setItems:bottomtoolBarItems]; 

Это добавит ваш barButtonItem к панели инструментов.

+0

Удивительно, спасибо за подробный ответ. Еще один вопрос. У меня уже есть множество просмотров в моей раскадровке. Новое представление должно получить сгенерированное программным способом (как ваш код) из существующего представления (viewcontroller). Как я исхожу из этого. Насколько я понимаю, представление создается во время выполнения, но не является частью раскадровки. Нужно ли рисовать новое представление в раскадровке и называть его (его классы) '' newView "' без использования Segue? – JFS

1

При создании UIBarButtonItem убедитесь, что вы задали цель и действие. Затем в вызываемом методе представьте свой следующий контроллер представления.

Создайте элемент кнопки панели.

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonItemStylePlain target: self action: @selector(presentVC:)]; 

Представить контроллер вида.

-(void)presentVC:(id)sender 
{ 
    [self presentViewController: otherViewController animated: YES completion:^{ 
     // COMPLETION BLOCK 
    }]; 
} 
+0

Спасибо за ответ! Означает ли это, что я могу смешивать оба подхода в раскадровке: используя segues и используя код для подключения представлений (viewcontrollers)? – JFS

Смежные вопросы