我开始使用Swift进行移动应用程序开发。我使用tableView原型单元在viewController中设计了一个表单(不需要使用UITableViewController和静态单元格,因为我需要在视图控制器中放置其他控件)。
每个单元格都有一个唯一的标识符,并使用故事板设计。我为UITableViewCell创建了一个子类,并将其分配给所有单元格。
class VehicleTableViewCell: UITableViewCell {
@IBOutlet var txtModel: UITextField!
//@IBOutlet weak var txtModel: UITextField!
@IBOutlet weak var txtODO: UITextField!
@IBOutlet weak var txtFuel1: UITextField!
@IBOutlet weak var txtFuel2: UITextField!
@IBOutlet weak var lblDistanceUnit: UILabel!
@IBOutlet weak var lblFuel2Unit: UILabel!
@IBOutlet weak var lblFuel1Unit: UILabel!
@IBOutlet weak var lblMake: UILabel!
@IBOutlet weak var lblFuelType: UILabel!
@IBOutlet weak var lblCurrency: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}}
这是我的UIViewController执行常规操作:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate,UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
// Array of cell identifiers
let cellArray = ["CellMake", "CellModel", "CellODO", "CellFuelType", "CellFuel1", "CellFuel2", "CellCurrency"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cellArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier(cellArray[indexPath.row]) as! VehicleTableViewCell
if indexPath.row == 1
{
cell.txtModel.addTarget(self, action: "txtModelChanged:", forControlEvents: UIControlEvents.TouchUpInside)
println("Inside index row 1")
}
return cell
}
@IBAction func txtModelChanged(sender: UITextField!)
{
println("test")
}}
以下是我困惑且无法继续的几件事。
我在cellForRowAtIndexPath中添加了txtModel的目标,并在touchUpInside事件中将其映射到函数txtModelChanged。它只是没有触发功能,也没有引发任何错误。对可能出现的问题有什么猜测?
我尝试通过点击"完成"来获取所有对象的值。按钮。如何遍历tableView以获取所有值?
还有其他更好的方法来实现同样的目标吗?
答案 0 :(得分:0)
<强>第一强>
如果要触发某些方法,当用户触摸您的UITextField时 - 您应该覆盖文本字段委托方法
textFieldDidBeginEditing
并调用resign first responder以避开键盘,然后编写自定义代码或方法调用。 / p>
取自:https://stackoverflow.com/a/4919134/2210926
在这个特殊问题中,您是否使用Swift或Obj-C并不重要。
<强>第二强>
这不是一个选项,您无法保证当时所有的单元格视图都处于活动状态。您需要将所有数据存储在某个位置,例如在数组中。
答案 1 :(得分:0)
对于通用表单设计,我发现https://github.com/escoz/QuickDialog非常有帮助。我在我的一个应用程序中使用过它。如果您想实现自己的逻辑,那么我认为此示例将帮助您推断信息。
答案 2 :(得分:0)
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 280;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
return cell;
}