行动:@选择(showAlert :)如何传递参数在此showAlert方法?
-
19-09-2019 - |
题
我添加自定义按钮,我UITableViewCell
。在该按钮的操作我想打电话showAlert:
函数和要传递细胞标记的方法。
如何传递一个参数在此showAlert
方法:action:@selector(showAlert:)
解决方案
这是不可能的。必须创建符合IBAction为一种方法
- (IBAction)buttonXYClicked:(id)sender;
在该方法中,可以创建和调用UIAlertView中。不要忘记按钮与在界面生成器的方法进行连接。
如果你喜欢多个按钮之间进行区分(例如,您有一个在每个表格单元)可以设置按钮的标签属性。然后检查sender.tag从哪个按钮的点击来。
其他提示
如果你在Tableviewcell使用按钮然后u必须标签值添加到每个细胞上的按钮,用ID作为参数设定的方法addTarget。
示例代码:
您必须在cellForRowAtIndexPath
方法类型下面的代码。
{
// Set tag to each button
cell.btn1.tag = indexPath.row;
[cell.btn1 setTitle:@"Select" forState:UIControlStateNormal]; // Set title
// Add Target with passing id like this
[cell.btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
-(void)btnClick:(id)sender
{
UIButton* btn = (UIButton *) sender;
// here btn is the selected button...
NSLog(@"Button %d is selected",btn.tag);
// Show appropriate alert by tag values
}
周杰伦的答案是伟大的,但如果你有多个部分,它不会工作,因为indexRow是的本地的部分。
的另一种方法,如果使用的是在TableView中具有多个区段的按钮,是传递的触摸事件。
如果你在一个延迟加载声明您的按钮:
- (UIButton *)awesomeButton
{
if(_awesomeButton == nil)
{
_awesomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_awesomeButton addTarget:self.drugViewController action:@selector(buttonPressed:event:) forControlEvents:UIControlEventTouchUpInside];
}
return _awesomeButton;
}
这里的关键是链中的事件到所述选择器的方法。你可以不通过自己的参数,但是你可以传递的事件。
在功能按钮钩住:
- (void)buttonPressed:(id)sender event:(id)event
{
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
NSLog(@"Button %d was pressed in section %d",indexPath.row, indexPath.section);
}
这里的关键是函数indexPathForRowAtPoint
。这是UITableView
一个极好的功能,这将使你在任何时候indexPath。同样重要的是功能locationInView
因为你需要在的tableView的背景下,触摸,因此可以精确定位具体indexPath。
这将让你知道这是哪个按钮,在具有多个部分的表。
不隶属于 StackOverflow