我使用UITableview,使用IB我在自定義單元格和一些標籤中定義了一個UIButton,自定義單元格子類已經有IBAction的按鈕和必要的IBOutlets的定義,但我想處理tableview中的按鈕單擊事件控制器它自己但不在自定義單元格子類中。iPhone:如何從viewcontroller獲得一個自定義單元的按鈕動作?
我該怎麼做?我也需要得到哪一行的按鈕是完全點擊的,所以我會顯示與它相關的內容。
我使用UITableview,使用IB我在自定義單元格和一些標籤中定義了一個UIButton,自定義單元格子類已經有IBAction的按鈕和必要的IBOutlets的定義,但我想處理tableview中的按鈕單擊事件控制器它自己但不在自定義單元格子類中。iPhone:如何從viewcontroller獲得一個自定義單元的按鈕動作?
我該怎麼做?我也需要得到哪一行的按鈕是完全點擊的,所以我會顯示與它相關的內容。
我解決了問題,加入到我的控制器;
[cell.expButton setTag:indexPath.row];
UIButton *button = (UIButton *)[cell expButton];
[button addTarget:self action:@selector(buttonTapped:event:) forControlEvents:UIControlEventTouchUpInside];
對於需要點擊事件(觸摸子視圖效應),我通常這樣做:
-(void)viewDidLoad{
self.tableView.delaysContentTouches = NO;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// This will do the touch down effect on the subView of your UIButton
for (id obj in cell.subviews)
{
if ([NSStringFromClass([obj class]) isEqualToString:@"UITableViewCellScrollView"])
{
UIScrollView *scroll = (UIScrollView *) obj;
scroll.delaysContentTouches = NO;
break;
}
}
// I need to get which row's button is exactly clicked so I will show the content relavant to it.- here it is
UIButton *btn = (UIButton*)[cell viewWithTag:200];
// btn = cell.myButton; If you are connected with the IBOutlet
[btn setTag:200 + indexPath.row];
[self.btnPlay addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
}
-(void)btnAction: (id)sender{
UIButton *btn = (UIButton *)sender;
NSLog(@"Selected subView of the Row is %d th tag", btn.tag-200);
// You can get the UITableViewCell using the tag property
selectedIP = [NSIndexPath indexPathForRow:btn.tag - 200 inSection:1;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:selectedIP];
// Do the relevant code
}
要如何做的方式,這是正確的(MVC怎麼也得編碼乾淨) - 多數民衆贊成在美麗!
爲了讓它更有效率,你必須使用委託 - 這是如何做到這一點的最佳方式! 在這裏你可以做到這一點(例如迅速)。 https://stackoverflow.com/a/29920564/1415713
謝謝!它幫助:) – nithinreddy
@nithinreddy我很高興! – Spring