2017-08-20 43 views
0

我對Swift中的編碼比較新,我正在更新當前在應用商店中的應用程序。我目前正在創建一個數組,用於在xib文件中創建的tableView的單元格中的內容。這裏是什麼樣子:將UIButton添加到數組中

`struct callData { 
    let cell : Int? 
    let hotlineName : String? 
    let phoneNumber : String? 
    let callBtn : UIButton? 
    let iconImg : UIImage? 

    init(cell:Int,hotlineName:String,phoneNumber:String, callBtn:UIButton, iconImg:UIImage) { 
     self.cell = cell 
     self.hotlineName = hotlineName 
     self.phoneNumber = phoneNumber 
     self.callBtn = callBtn 
     self.iconImg = iconImg 

    } 
} 

class _ViewController: UIViewController, UITableViewDelegate,UITableViewDataSource { 

    @IBOutlet weak var tableView: UITableView! 

    var arrayOfCallData = [callData(
      cell: 0, 
      hotlineName:"", 
      phoneNumber:"", 
      callBtn:"", 
      iconImg: #imageLiteral(resourceName: "smartphone") 
     )] 

`

我不知道如何插入按鈕(callBtn)到一個數組(arrayOfCallData)沒有它提供大量的錯誤。它的目的是從應用程序的字符串中調用數字,但我不知道如何實現按鈕調用的操作。 這裏是用於從應用程序內調用代碼的示例:

let url = NSURL(string: "tel://8004424673")! UIApplication.shared.open(url as URL)

我希望能夠合併到該陣列(callBtn),這樣我可以創建多個按鈕,可以調用不同的號碼。

+0

我編輯了你的代碼格式,盡我所能。爲代碼縮進四個空格是正確的降價。然後我儘可能用arrayOfCallData'縮進 - 如果錯誤請更正。我發現它非常困難(甚至可能語法錯誤),以便理解「callBtn」鍵 - 這可能是您的問題。也許你可以通過將'let url'分成兩行(也許是三行)代碼來找到各種錯誤,*構建*該鍵的值。 – dfd

+0

謝謝!我不小心刪除了callBtn和iconImg之間的逗號。 –

+0

你的代碼沒有意義。在初始化器中的'callBtn:'之後你不能說'let'什麼。初始值設定項想要_objects_,而不是代碼。以'let'開頭的短語不是一個按鈕。 – matt

回答

0

在您的callData中,將您的電話號碼保存爲callBtnAction,然後您可以在選擇器方法中將其取回。

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    let cellIdendifier: String = "CallDataCell" 

    let cellData = arrayOfCallData[indexPath.row] 

    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdendifier, for: indexPath) 
    let button = UIButton.init() 
    button.frame = CGRect.zero //Set your frame here 
    button.setTitle(cellData.callBtnText, for: UIControlState.normal) 
    button.tag = indexPath.row 
    button.addTarget(self, action: Selector(("buttonClicked:")), for: UIControlEvents.touchUpInside) 

    cell.addSubview(button) 
    return cell 

} 

func buttonClicked(sender:UIButton) { 
    let selectedRow = sender.tag 
    let callData = arrayOfCallData[selectedRow] 
    let action = callData.callBtnAction 
    print(action) 

} 
0

單元格應擁有視圖(例如按鈕),並且應該使用您的數據來裝飾這些視圖。因此,如果您從數據中移除UI關注點,例如用按鈕標題字符串替換UIButton引用,可以將該數據應用於方法cellForRowAt中的單元格視圖。

+0

如果我正確理解你,我應該將'let callBtn:UIButton?'更改爲一個字符串並將let語句移動到'cellForRowAt'?我很抱歉,我沒有完全理解這一點。 –

+0

是的,嘗試用'let callBtnTitle:String'替換'let callBtn:UIButton'。注意你的UIViewController實現了UITableViewDataSource,這意味着你的視圖控制器將實現一個'cellForRowAt'方法,你可以通過向你的數據應用來填充每個單元格。您的單元應該已經在xib中定義了一個按鈕。一般的想法是,xib文件包含所有的UIViews,你的表格和單元格都將爲你創建。然後,您將數據應用到每個單元格,例如cell.button.setTitle(「StringFromYourData」,用於:.normal)。祝你好運! – Norman