2012-05-25 2 views
3

У меня есть ViewController, а затем два разных ViewControllers, которые расширяют этот основной ViewController, один для iPhone и других для iPad.Добавить селектор в UIButton

iPad ViewController создает экземпляр отдельного расширенного UIView и устанавливает его как собственный вид. В этом представлении есть несколько кнопок, которые я хочу добавить своими методами выбора в качестве некоторых методов в основном ViewController. Как это можно достичь?

Так вот способ визуализировать это:

Main ViewController 
| iPhone ViewController 
| iPad ViewController 
    | Some UIView Class --> Button must invoke method in Main View Controller 

EDIT: Я не использую интерфейс построителя вообще.

ответ

2

Если я не ошибаюсь, вопрос в том, что это не трюк.

Если вы определяете (IBAction)buttonPressed:(id)sender в главном контроллере, он унаследован подклассом контроллера iPad. Поэтому, указав его как селектор, принадлежащий self, когда контроллер просмотра iPad настраивает свою кнопку, он должен работать нормально.

+0

Извините, забыл указать, я вообще не использую конструктор интерфейса. – darksky

+0

Это не должно иметь никакого отношения к логике наследования. Если кнопка определена в коде контроллера, метод 'addTarget:' может по-прежнему указывать 'self' и селектор в суперклассе. –

+0

Ох - кнопка не находится в классе контроллера вида iPad. Он находится в классе UIView, который инициализируется (и устанавливается в 'self.view') в контроллере представления iPad, который наследует главный контроллер представления. Таким образом, 'UIView' - это другой класс, который расширяет пользовательский' UIView'. – darksky

21

Ваш вопрос немного запутанный, но если я понимаю, вы можете использовать такой код для установки кнопки:

[button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside]; 

Так вы установили addTarget к экземпляру MainViewController и установите действие независимо от того, какой метод вы хотите вызвать внутри MainViewController. Вы также должны иметь возможность сделать это в Interface Builder, если ваш метод принимает IBAction.

+0

addTarget должен быть экземпляром вашего диспетчера просмотра ipad, тогда это отлично работает – iTukker

+0

Как создать 'yourObject'? Это VC, из которого это представление заканчивается. В этом случае я не могу сделать: 'ThisVC * vc = [ThisVC alloc] init]', потому что он уже создан. Мне нужен способ ссылаться на главный контроллер представления из UIView. 'UIView' не создается в контроллере представления iPad, но в другом классе (см. Мой комментарий ниже). – darksky

+0

Вы должны сделать свойство в своем делете делегата (или где угодно), чтобы удержать указатель на этот контроллер представления. Поэтому в своем делете делегировать файл .h, поставьте: '@property (nonatomic, keep) UIViewController * myViewContoller;' и установите это, когда вы создаете свой контроллер вида. Чем вы всегда можете добраться до своего делегата приложения и найти контроллер вида следующим образом: '[(AppDelegate *) [[UIApplication sharedApplication] delegate] myViewController];' – woz

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