我正在尝试将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/

10-10 19:06