我正在尝试将UIView子视图添加到UIViewController中,并且该UIView具有希望用户能够切换的UISwitch。根据状态,UITextField的值将来回切换。这是子视图(InitialView):
import UIKit
class InitialView: UIView {
// All UI elements.
var yourZipCodeSwitch: UISwitch = UISwitch(frame: CGRectMake(UIScreen.mainScreen().bounds.width/2 + 90, UIScreen.mainScreen().bounds.height/2-115, 0, 0))
override func didMoveToSuperview() {
self.backgroundColor = UIColor.whiteColor()
yourZipCodeSwitch.setOn(true, animated: true)
yourZipCodeSwitch.addTarget(ViewController(), action: "yourZipCodeSwitchPressed:", forControlEvents: UIControlEvents.TouchUpInside)
self.addSubview(yourZipCodeSwitch)
}
}
如果我想让目标正确指向以下功能,我应该在哪里设置目标或包含此功能?我试过了:
在UIViewController中而不是UIView中设置目标
将该功能保留在UIView中
功能如下:
// Enable/disable "Current Location" feature for Your Location.
func yourZipCodeSwitchPressed(sender: AnyObject) {
if yourZipCodeSwitch.on
{
yourTemp = yourZipCode.text
yourZipCode.text = "Current Location"
yourZipCode.enabled = false
}
else
{
yourZipCode.text = yourTemp
yourZipCode.enabled = true
}
}
这是我将其加载到UIViewController中的位置:
// add initial view
var initView : InitialView = InitialView()
// Execute on view load
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
view.addSubview(initView)
}
非常感谢您的帮助-谢谢!
最佳答案
是的,didMoveToSuperView()
位置没有多大意义。因此,您正在创建一个随机的,完全未连接的ViewController
实例,以使编译器感到满意,但您的项目却令人沮丧。控制代码在控制器中,视图代码在视图中。
您需要输入真实的ViewController
:
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(initView)
// Note 'self' is the UIViewController here, so we got the scoping right
initView.yourZipCodeSwitch.addTarget(self, action: "yourZipCodeSwitchPressed:", forControlEvents: .ValueChanged)
}
此外,.TouchUpInside适用于
UIButton
。拨动开关要复杂得多,因此它们的事件有所不同。在拨动开关的当前设置上进行内部触摸可以而且不应执行任何操作,而在相反设置上进行内部触摸可以触发上述控制事件。 iOS为您执行所有内部匹配检测。关于ios - 在UIViewController中单击已加载 subview (UIView)的按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31734143/