2014-12-04 83 views
0

我正在基于用户的偏好以编程方式添加一些UISteppers和UITextField。但是,我似乎无法获得UIStepper触摸点击 - 它看起来没有在 -/+按钮上注册触摸。我试着将用户交互的userTriggers UIView设置为禁用,但那不起作用。无法与UIStepper进行交互

1)我还能尝试什么?

2)我还需要能够增加相应的UITextField,然后将其写入到我的UserData.plist文件中,并且我不确定如何访问每个字段。我应该将它们添加到某种数组中吗?

import UIKit 

class TriggersViewController: UIViewController{ 

@IBOutlet var userTriggers:UIView! 
@IBOutlet var saveButton:UIButton! 

var triggersList:Array<String>! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    loadTriggers() 
    var prevInput = 250; 
    for index in 0..<triggersList.count{ 

     //label for trigger 
     var label = UILabel(frame: CGRectMake(0, 0, 200, 21)) 
     label.center = CGPointMake(120, CGFloat(prevInput)) 
     label.textAlignment = NSTextAlignment.Left 
     label.text = triggersList[index] 
     userTriggers.addSubview(label) 

     //input box for trigger 
     var input = UITextField(frame: CGRectMake(0, 0, 50, 21)) 
     input.center = CGPointMake(250, CGFloat(prevInput)) 
     input.text = "0"; 
     //add input to triggersView 
     userTriggers.addSubview(input); 

     //UIStepper 
     var stepper = UIStepper(frame: CGRectMake(0, 0, 50, 21)) 
     stepper.center = CGPointMake(300, CGFloat(prevInput)) 
     stepper.addTarget(self, action: "stepperValueChanged:", forControlEvents: .ValueChanged) 
     stepper.enabled = true 
     //add stepper to triggersView 
     userTriggers.addSubview(stepper); 


     prevInput += 50 //increment for height 

    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func stepperValueChanged(sender:UIStepper!){ 
    println("It Works, Value is --&gt;\(Int(sender.value).description)") 
} 

func loadTriggers(){ 
    var myDict: NSDictionary? 

    if let path = NSBundle.mainBundle().pathForResource("UserConfigs", ofType: "plist") { 
     myDict = NSDictionary(contentsOfFile: path) 
    } 
    if let dict = myDict { 
     triggersList = dict["Triggers"] as Array<String> 
    } 
} 

}

回答

2

你确实需要设置在上海华用户交互功能。在这里看到更多的信息:UIView -- "user interaction enabled" false on parent but true on child?

此外,第二个问题是一个简单的(但不是很理想)的方式来访问每个字段是使用标签。 Clean-ish的方式是使用枚举定义标签。然后使用viewWithTag访问字段。

但是,有比标签更好的方法(例如,因为任何视图都可以被赋予任何标签,所以它们不是非常防错的)。如果只有几个文本字段/步进器,尽管您可以轻松地为每个视图控制器添加属性。最好的解决方案是将步进器和字段组合在UIView子类中(假设它们彼此相邻),并将对这些分组的引用存储在视图控制器中(可能位于数组中)。

+0

哦,我正要给+1,直到我阅读'viewWithTag'位。属性是首选。如果这不是理想的(也许有很多),那么总比使用'标签'更好。 – Fogmeister 2014-12-04 21:32:21

+0

Sheesh,很好,答案已更新。怎么样 ? – shim 2014-12-04 21:44:55

+1

不需要“sheesh”。我真的认为'tag'应该完全从'UIView'中移除。它促进了不好的模式。现在好多了。 +1 – Fogmeister 2014-12-04 21:55:36