在我的应用程序中有一个表格视图。当选择表视图中的行时,会出现UIView
并显示信息。
行标题来自包含字符串的plist文件。
plist文件还包括具有与行标题相关联的电话号码的字符串。
在自定义UIView中我有一个按钮,当你点击按钮我希望它调用plist文件中声明的数字。
与用户单击的行关联的数字。
我怎么能做到这一点?
该行动是普通的IBAction:
- (IBAction)callNumber:(id)sender;
它连接到IB中的按钮(在Xcode 4中)。
如果有人能解决我的问题,我将不胜感激,谢谢。
修改
为了清楚起见,我想获取与您在表格视图中选择的行相关联的电话号码。 plist中的字符串有一个键,用于电话号码名称:“phone”。
NSString *phone = [[tableList objectAtIndex:indexPath.row] objectForKey:@"phone"];
“tablelist”是一个NSMutableArray。我想获得关键的“手机”并将其存储在NSString *手机中。所有这些都在IBAction中。发表整个课程会有所帮助吗?
答案 0 :(得分:3)
有一个优雅的解决方案,就是在设置UITableViewCell
时。将UIButton的标记设置为行的索引:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* CellIdentifier = @"Cell";
YourCustomCell* cell = (YourCustomCell*)[tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
// All the code for loading a cell
// Other code you have for configuring the cell
// HERE'S THE IMPORTANT PART: SETTING THE
// BUTTON'S TAG TO THE INDEX OF THE ROW
cell.phoneButton.tag = indexPath.row;
return cell;
}
然后,在操作代码中,您可以将索引拉出标记:
- (IBAction)callNumber:(id)sender {
UIButton* button = sender;
int index = button.tag;
NSString *phone = [[tableList objectAtIndex:indexPath.row] objectForKey:@"phone"];
// Make the phone call
}
答案 1 :(得分:1)
您需要在“自定义视图”上拥有一个属性,该属性指示所选行的索引路径。您可以将其放在自定义视图控制器的标头中以声明此属性:
@interface MyCustomViewController : UIViewController {
...
NSIndexPath * indexPath;
}
@property (nonatomic, retain) NSIndexPath * indexPath;
然后,设置如下的实现:
@implementation MyCustomViewController
@synthesize indexPath;
...
// only needed if not using ARC
- (void)dealloc {
self.indexPath = nil;
...
[super dealloc];
}
@end
现在,在tableView:didSelectRowAtIndexPath:
方法中,只需像往常一样创建视图控制器,但在其上设置indexPath
属性,以便将来可以访问它:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomViewController * vc = [[MyCustomViewController alloc] initWithBundle:nil nibName:nil];
[vc setIndexPath:indexPath];
[self presentModalViewController:vc];
// if not using ARC
[vc release];
}
然后,在MyCustomViewController.m
中的任何位置,只需编写self.indexPath.row
即可获取所选索引路径的行。
答案 2 :(得分:0)
您可以采取以下快速临时解决方法:
细胞选择方法: - 为选择了indexPath.row保存NSUserDefault
在你的下一个观点中: - 读取任何行读取的NSUserDefault值
然后,这将让下一个视图知道选择了哪一个,并允许您为其获取正确的数据。
答案 3 :(得分:0)
如果您在UITableViewCell中有控件执行需要知道索引路径的操作,则可以使用以下几种方法:
如果您有一个部分(或具有控件的单元格的已知部分)并且没有将tag
属性用于其他内容,请将行+ 1存储在tag
中属性。然后,当调用该操作时,检索sender.tag - 1
并获得行索引。
从你的对照中走出超级视图链,直到你到达UITableViewCell
。调用[tableView indexPathForCell:cell
来获取indexPath。
创建控件的子类并将indexPath存储在控件中。