我有一个简单的设置页面,它是一个动态的Tableview,允许用户使用UISwitch来切换首选项。我想在用户切换开关时执行操作(编辑他们的首选项),但我无法将cell.textLabel.text获取到目标方法。
我可以获得开关控件的标签,但这没有用,因为tableview是动态的,因此我无法知道0 =技术,1 =投入,2 =财务等。
答案 0 :(得分:0)
你可以轻松遍历单元格,然后通过它的标签找到UISwitch对象,比较对象指针,然后你有正确的开关和它所存在的正确的UITableviewCell。
for (UITableViewCell* cell in self.tableview.visibleCells) {
UISwitch* sw = [cell viewWithTag:1];
if (sw == triggeredSwitch) {
// this is the correct cell
}
}
希望有所帮助。
答案 1 :(得分:0)
使用拥有交换机的自定义UITableViewCell
子类并处理切换操作方法。当action方法触发时,单元格可以访问自己的标签文本 - 但实际上它应该有一些更好的标识符(作为属性)并使用它来代替。
如何从单元格中获取信息取决于你,但给它一个委托或目标/动作对来传递数据是合适的。
答案 2 :(得分:0)
关联对象的另一项工作!
创建一个记住某些关联对象的UISwitch ..(可以是单元格,表格数据,类别等)
#import <objc/runtime.h>
static const char * SwitchData = "SwitchData" ;
...
UISwitch * theSwitch ;
id switchData = ...object to be associated to switch...
objc_setAssociatedObject( theSwitch, SwitchCategory, switchData, OBJC_ASSOCIATION_RETAIN_NONATOMIC ) ;
在你的行动方法中:
-(void)switchTapped:(id)sender
{
UISwitch * switch = (UISwitch*)sender
id switchData = objc_getAssociatedObject( theSwitch, SwitchData ) ;
... switchData has your associated object ...