2012-04-23 5 views
1

Я работаю по курсу CS193p Stanford iOS, и я почти закончил с Assignment 3, в котором я конвертирую графический калькулятор в универсальное приложение для iPad. Приложение рисует график, когда программа (например, «x + 3») вводится в калькулятор, а затем пользователь нажимает кнопку «График». На iPhone, я просто segued, когда была нажата кнопка Graph, но в IPad, у меня есть UISplitViewController, что я настроить целевое действие с помощью кнопки Graph:iOS Метод IBAction никогда не называется

- (IBAction)ipadGraphPressed:(UIButton *)sender { 
    if ([self splitViewGraphViewController]) { 
     [[self.splitViewController.viewControllers lastObject] setProgram:self.brain.program]; 
    } 
} 

Это вызывает setProgram: в GraphViewController, который затем вызывает setNeedsDisplay: в GraphView и должен нарисовать график.

Для сравнения, вот метод Segue, который работает на iPhone:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    [segue.destinationViewController setProgram:self.brain.program]; 
} 

Я очень уверен, что соединение устанавливается между кнопкой и способа его действия, но при запуске приложения, это действие метод никогда не вызывается при нажатии кнопки. Есть ли что-нибудь еще, чтобы проверить, чтобы метод вызывался?

+0

Если метод действия не вызывается при нажатии кнопки, то так или иначе «IBAction» не привязан к кнопке правильно. Вы уверены, что вы подключили «IBAction» к событию «Прикоснуться внутрь» и что вы создаете свой контроллер представлений таким образом, чтобы обеспечить возможность подключения для вас во время создания экземпляра? – aroth

+0

Я уверен, что событие Touch Up Inside подключено. Что касается настройки контроллера просмотра, я не уверен. IPhone segue работает, установив свойство программы GraphViewController, и поэтому я сделал то же самое в методе действий. Я предположил, что это сработает. – Paul

+0

Сначала проверьте, что кнопка имеет действие, связанное с ipadGraphPressed. Затем добавьте NSLog (@ "% @", отправитель); внутри метода нажмите кнопку и посмотрите, работает ли кнопка. – Pochi

ответ

0

Оказывается, в моем коде не было ничего плохого. Поймав раскадровку, я заметил, что даже если я добавил новые кнопки к главному виду, они никогда не появлялись при запуске приложения. Я попытался изменить имя раскадровки от iPad.storyboard до iPad_1.storyboard, а затем появились мои изменения, но ни один из моих кодов вращения не действовал. Мое решение для всего этого беспорядка состояло в том, чтобы вернуться к предыдущей версии приложения прямо перед тем, как добавить новую раскадровку. Я снова добавил раскадровку для iPad и смог сделать все правильные подключения.

Чтобы подтвердить это, мой друг проверил проект на Github и сообщил, что, хотя я не мог назвать метод IBAction, он отлично работал для него. Я считаю, что что-то перепуталось с моими местными настройками раскадровки, и это мешало работе приложения правильно. Мой взнос из этого заключается в том, чтобы быть осторожным с именованием и переименованием файлов раскадровки, особенно при работе с контролем версий.

2

У меня была та же проблема. Я все правильно подключил к своим IBOutlets и IBActions. То, что вызывает проблему, - это прозрачный вид поверх кнопок, которые блокируют касания.

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