2016-02-08 49 views
0

我跟着this指南在表格內建立一個文本字段的形式,我設法做到了,但在教程中他只是使用單一類型的字段。我想要一些字段有下拉列表,我還會添加其他字段。UITableViewCell中的iOS輸入

我不確定最好的方法來做到這一點,我猜字段需要在一個數組中,使它更容易管理。我正在考慮下面的代碼,結構現在只是通用的。

struct DropdownInput { 
    let name: String 
    let placeholder: String 
    let defaultValue: String 
    let values: [String] 
} 

struct TextInput { 
    let name: String 
    let placeholder: String 
    let defaultValue: String 
} 

var formFields: [Any] = [ 
    TextInput(name: "test1", placeholder: "Some value", defaultValue: ""), 
    DropdownInput(name: "test2", placeholder: "Some value", defaultValue: "", values: ["Test1","TEST2","Test3"]), 
] 

編輯:我的代碼正在工作,但我認爲它不正確地解壓縮formField對象。這是說Any類型的值沒有成員名稱,我如何訪問這些值?

if self.formFields[indexPath.row] is TextInput { 
     if let fieldValues: Any = self.formFields[indexPath.row] as? TextInput { 
      if let cell = tableView.dequeueReusableCellWithIdentifier("cellTextField") as? TextInputTableViewCell { 
       print(fieldValues.name) 
       return cell 
      } 
     } 
    } 
+0

你得到了哪個錯誤?你也可以通過使用'if let textInput = formFields [index] as'來減少代碼。 TextInput' – Nimble

+0

請確保您已爲兩個單元添加了TextInputTableViewCell類。 – Shoaib

+0

,我建議使用'dequeueReusableCellWithIdentifier:forIndexPath',這樣你就可以確定你註冊了單元的類/筆尖 – Nimble

回答

1

回答你的問題,「任何沒有成員的名字」 - 只是刪除任何與使用

if let fieldValues = formFields[indexPath.row] as? TextInput { 
    print(fieldValues.name) 
} 
0

你可以把它,如果你有兩個不同的細胞一點簡單的;

struct TextInput { 
    let cellIdentifier: String  
    let name: String 
    let placeholder: String 
    let defaultValue: String 
    let values: [String] 
} 

var formFields: [TextInput] = [ 
    TextInput(cellIdentifier: "cellTextField", name: "test1", placeholder: "Some value", defaultValue: "", values: []), 
    TextInput(cellIdentifier: "cellDropdownTextField", name: "test2", placeholder: "Some value", defaultValue: "", values: ["Test1","TEST2","Test3"]), 
] 

然後;

let txtInput:TextInput = self.formFields[indexPath.row]; //It is not optional, so no if condition. 
let cell = tableView.dequeueReusableCellWithIdentifier(txtInput.cellIdentifier, forIndexPath: indexPath) as! UITableViewCell; //It must return cell, if the cell is registered so no if condition here too. 

return cell;