Я хочу изменить вид контроллера, когда кнопка нажата iphone - PullRequest
0 голосов
/ 16 марта 2010

У меня есть контроллер табличного представления с пользовательскими ячейками. В этих ячейках я добавил кнопку для каждой ячейки. Мне бы хотелось, чтобы при нажатии этой кнопки отображалось новое представление с дополнительной информацией об этой ячейке, отличное от представления, которое я получал из didSelectRowAtIndexPath.

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

Я писал на других форумах без ответа, надеюсь, это сработает.

Спасибо. Gian

1 Ответ

0 голосов
/ 16 марта 2010

Я бы, вероятно, подкласс UIButton иметь экземпляр NSIndexPath.Таким образом, каждый отдельный UIButton в UITableViewCell может «знать», где он находится в табличном представлении, поэтому, когда вы нажимаете кнопку, вы можете вызвать некоторый метод, который принимает NSIndexPath и выдвигает новое представление, подобное тому, что вы делаете в -didSelectRowAtIndexPath:, но вместо этого используйте другое представление (возможно, дайте ему описательное имя метода, например -didPressButtonAtIndexPath:).

Вместо того, чтобы использовать Interface Builder для этого, вы должны добавить метод к самому подклассу UIButton, который вturn вызывает метод на вашем контроллере представления.Затем для каждого 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];
}
...