Я бы, вероятно, подкласс 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];
}