更改UISwitch时,将标签文本作为参数发送到目标操作

时间:2014-05-17 18:34:15

标签: ios ios7 uiswitch

我有一个简单的设置页面,它是一个动态的Tableview,允许用户使用UISwitch来切换首选项。我想在用户切换开关时执行操作(编辑他们的首选项),但我无法将cell.textLabel.text获取到目标方法。

我可以获得开关控件的标签,但这没有用,因为tableview是动态的,因此我无法知道0 =技术,1 =投入,2 =财务等。

3 个答案:

答案 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 ...