Я хочу изменить контроллер просмотра при нажатии кнопки iphone
-
20-09-2019 - |
Вопрос
У меня есть контроллер табличного представления с пользовательскими ячейками.В эти ячейки я добавил кнопку для каждой из ячеек.Чего бы мне хотелось, так это чтобы, когда я нажимаю эту кнопку, отображалось новое представление с дополнительной информацией об этой ячейке, отличное от представления, которое я получаю из didSelectRowAtIndexPath .
Я знаю, что сейчас это трудный вопрос.Я видел, что кнопка выполняет какое-то действие в interfacebuilder (возможно, касание вниз), но как мне связать ее с каким кодом.где я должен объявить код, который обрабатывает это событие?
Я размещал сообщения на других форумах без ответа, надеюсь, это сработает.
Спасибо.Gian
Решение
Вероятно, я бы выделил подкласс UIButton, чтобы иметь экземпляр NSIndexPath .Таким образом, каждый отдельный UIButton в UITableViewCell может "знать", где он находится в табличном представлении, поэтому, когда вы нажимаете кнопку, вы можете вызвать некоторый метод, который принимает NSIndexPath и запускает новое представление, аналогичное тому, что вы делаете в -didSelectRowAtIndexPath:
но вместо этого с вашим другим представлением (возможно, дайте ему описательное имя метода, например -didPressButtonAtIndexPath:
).
Вместо того чтобы использовать Interface Builder для этого, вам следует добавить метод в сам подкласс UIButton, который, в свою очередь, вызывает метод на вашем контроллере представления.Затем для каждого UIButton вы можете использовать метод UIControl -addTarget:action:forControlEvents:
.Пусть UIButton вызовет свой собственный метод, который вызывает метод контроллера.Ваше решение может выглядеть примерно так:
// MyButton.h
@interface MyButton : UIButton {
NSIndexPath *myIndexPath;
MyViewController *viewController;
}
- (void)didPressButton;
@end
// MyViewController.h
@interface MyViewController { }
- (void)didPressButtonAtIndexPath:(NSIndexPath *)indexPath;
@end
Затем, когда вы создадите свои ячейки, для каждой кнопки вы добавите вызов:
[button addTarget:button
action:@selector(didPressButton)
forControlEvents:UIControlEventTouchDown];
И, наконец, внедрить -didPressButton
чтобы выглядеть как:
- (void)didPressButton {
[controller didPressButtonAtIndexPath:myIndexPath];
}