tableView原型单元格与tableView

时间:2015-05-19 18:02:36

标签: ios uitableview swift tableviewcell

我开始使用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")
}}

以下是我困惑且无法继续的几件事。

  1. 我在cellForRowAtIndexPath中添加了txtModel的目标,并在touchUpInside事件中将其映射到函数txtModelChanged。它只是没有触发功能,也没有引发任何错误。对可能出现的问题有什么猜测?

  2. 我尝试通过点击"完成"来获取所有对象的值。按钮。如何遍历tableView以获取所有值?

  3. 还有其他更好的方法来实现同样的目标吗?

3 个答案:

答案 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;
}