2015-05-19 50 views
0

我开始使用Swift进行移动应用程序开发。我使用tableView原型单元格设计了一个viewController中的窗体(不需要使用UITableViewController和静态单元,因为我需要在视图控制器中放置其他控件)。tableView原型单元格带外部动作按钮视图

每个细胞都有一个独特的标识符,并使用故事板设计。我为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. 还有其他更好的方法来实现吗?

回答

0

首先

如果你想火的一些方法,当用户触动你的UITextField - 你应该重写文本字段的委托方法textFieldDidBeginEditing并呼吁辞职第一响应,避免键盘,然后编写您的自定义代码或方法调用。

来自:https://stackoverflow.com/a/4919134/2210926

在这个特殊的问题,这并不重要,无论您是用斯威夫特或的OBJ-C。

这是不是一种选择,你不能保证你的所有单元格视图将活着的那一刻。您需要将所有数据存储在某个地方,例如在数组中。

0

对于通用形式设计,我发现https://github.com/escoz/QuickDialog非常有帮助。我在我的一个应用程序中使用过它。如果你想实现你自己的逻辑,那么我认为这个示例将帮助你推断信息。

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; 
} 
相关问题