【发布时间】:2012-05-11 12:14:14
【问题描述】:
我有一个像 12345678910111213 这样的数字,我需要将它从一个方法(cellForRow)传递到另一个(按钮操作方法)。我曾经使用的最简单的方法是通过按钮标签传递它。在这种情况下,这是不可能的(?)。我也可以为它创建一个属性,但是封装呢?我想知道真正正确(最好是简单)的方式来做这样的事情。提前致谢!
【问题讨论】:
标签: iphone objective-c ios
我有一个像 12345678910111213 这样的数字,我需要将它从一个方法(cellForRow)传递到另一个(按钮操作方法)。我曾经使用的最简单的方法是通过按钮标签传递它。在这种情况下,这是不可能的(?)。我也可以为它创建一个属性,但是封装呢?我想知道真正正确(最好是简单)的方式来做这样的事情。提前致谢!
【问题讨论】:
标签: iphone objective-c ios
您实际上可以将值附加到UIButton。当你有你想要传递的值并且你有一个对按钮的引用时:
static char kMyObject;
objc_setAssociatedObject(myButton, &kMyObject, [NSNumber numberWithInt:myInt], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
另一方面,当您收到按钮为 id 的操作时:
- (void)myAction:(id)sender
{
UIButton *myButton = (UIButton*)sender;
NSNumber *number=objec_getAssociatedOject(myButton,&kMyObject);
}
【讨论】:
UIButton 上创建一个类别,以使用属性包装对objc_setAssociatedObject() 和objec_getAssociatedOject() 的调用。
你不能像 Saad 所说的那样将它作为标签传递。你可以在这里使用NSDecimal numbers 。 @Saad 不能使用双精度,因为它会失去精度。
【讨论】:
在这个整数标记中,您可以存储指向类/结构/任何代表 bigint 的指针(32 位地址的情况)。
例如:
UIButton *button = [UIButton ...];
button.tag = (int)[[MyBigInt alloc] initWithString:@"12131312312312312"];
之后:
MyBigInt *bigInt = (MyBigInt *)button.tag;
...
[bigInt release];
【讨论】:
我将在这里做一些假设,因为我只是在经历类似的事情时。
首先,您需要获取包含按钮的单元格:
UITableViewCell *cell = nil;
for (UIView *view = sender; view; view = view.superview) {
if ([view isKindOfClass:[UITableViewCell class]]) {
cell = (UITableViewCell *)view;
break;
}
}
接下来,您需要获取该单元格的 indexRow:
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
最后,您必须访问您的数据:
ModelClass modelObject* obj = [self.data objectAtIndex:indexPath.row];
现在,您可以对模型进行任何所需的更改。
【讨论】: