2015-05-19 86 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; 
} 
相關問題