2016-02-03 29 views
0

我有这个函数可以得到一个UISwitch,其标签值与触发该函数的按钮相同,然后它的意思是改变UISwitch为true:Swift:用相同的标签点击一个按钮时更改UISwitch状态

let tagToSwitch = self.view.viewWithTag(sender.tag) as? UISwitch 
tagToSwitch?.setOn(true, animated: true) 

然而,这并不工作,如果我改变tagToSwitch!应用程序崩溃,也会返回错误'fatal error: unexpectedly found nil while unwrapping an Optional value'虽然我不知道我要去哪里错了,因为当我打印发件人.tag值之前,它会打印正确的值。

任何帮助表示赞赏。

回答

1

viewWithTag可能没有得到您想要的视图。你可以尝试一个for循环。

for view in self.view.subviews { 
    if let tagToSwitch = view as? UISwitch { 
     if tagToSwitch.tag == sender.tag { 
      tagToSwitch.setOn(true, animated: true) 
     } 
    } 
} 
+0

谢谢!这工作:) 虽然,我也使用类似的代码,如我在问题中提到的改变一个按钮的背景颜色在同一个功能,并工作。它让我想知道为什么它不起作用的UISwitch虽然 –

+0

我会说,因为有多个视图与该标签,该函数返回它找到的第一个,并不一定是你之后。 –

+0

嗯......我的印象是,我的代码是通过标签'sender.tag'获得视图内的所有UISwitch项目。由于所有的UISwitch项目都是在for循环中创建的,并且在for循环中创建时添加了标签,并且每次单击开关或按钮时都会打印正确的标签 –