Я хочу изменить контроллер просмотра при нажатии кнопки iphone

StackOverflow https://stackoverflow.com/questions/2452044

Вопрос

У меня есть контроллер табличного представления с пользовательскими ячейками.В эти ячейки я добавил кнопку для каждой из ячеек.Чего бы мне хотелось, так это чтобы, когда я нажимаю эту кнопку, отображалось новое представление с дополнительной информацией об этой ячейке, отличное от представления, которое я получаю из 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top