Это не способ сделать это, вы должны использовать делегатов, я предполагаю, что у нас есть два контроллера представления ViewController1 и ViewController2, и этот элемент проверки находится в первом, и когда его состояние изменяется, вы хотите что-то сделать в ViewController2, чтобы добиться этого надлежащим образом, вы должны сделать следующее:
Добавить новый файл в ваш проект (Протокол Objective-C) Файл -> Новый, теперь назовите его ViewController1Delegate или как хотите, и напишите они между директивами @interface и @end
@optional
- (void)checkStateDidChange:(BOOL)checked;
Теперь перейдите к ViewController2.h и добавьте
#import "ViewController1Delegate.h"
, затем измените его определение на
@interface ViewController2: UIViewController<ViewController1Delegate>
Теперь перейдите к ViewController2.m и внутри реализации добавьте:
- (void)checkStateDidChange:(BOOL)checked {
if (checked) {
// Do whatever you want here
NSLog(@"Checked");
}
else {
// Also do whatever you want here
NSLog(@"Not checked");
}
}
Теперь перейдите к ViewController1.h и добавьте следующее свойство:
@property (weak, nonatomic) id<ViewController1Delegate> delegate;
Теперь, если вы создаете ViewController1 внутри ViewController2 после какое-то событие, то вы должны сделать это таким образом, используя файлы NIB:
ViewController1* controller = [[NSBundle mainBundle] loadNibNamed:@"ViewController1" owner:self options:nil][0];
controller.delegate = self;
[self presentViewController:controller animated:YES completion:nil];
Теперь все готово, когда вы обнаруживаете событие проверки, измененное в V iewController1, все, что вам нужно сделать, это ниже
[delegate checkStateDidChange:checked]; // You pass here YES or NO based on the check state of your control
Пожалуйста, скажите мне, если есть что-то, что не ясно, если я не правильно понял ваш вопрос.
Я почти уверен, что был другой способ (запуск из представления дизайнера), но я не могу воспроизвести его.
Я обычно не использую обработчики событий страницы, вместо этого я переопределяю соответствующие методы (например, OnLoad
вместо Page_Load
]). Чтобы реализовать одно из этих переопределений, вы можете просто ввести «переопределить» в коде программной части и нажать пробел , чтобы получить список методов, которые вы можете переопределить.
в качестве ярлыка, чтобы увидеть, что доступно, вы всегда можете просто набрать «Страница». а затем просмотрите список в intellisense. Затем вы можете выбрать один, нажать + = Tab Tab , чтобы он сгенерировал для вас заглушку. как только заглушка будет создана, вам придется удалить строку «Page.event + =», где бы вы ее ни создавали. Это своего рода обходной путь, но он может работать довольно быстро, если вы его освоите.
With the invaluable ReSharper installed (might work without) I can just type:
override
and when I hit space IntelliSence pops up with a list of all the events that I can override such as OnInit, OnPreRender, etc.
В окне исходного кода из поля со списком объектов выберите нужный элемент управления (страницу). Затем из поля со списком событий, которое находится справа от поля со списком предыдущего списка объектов, выберите нужное событие. Visual studio создаст для вас обработчик событий.