2015-08-14 23 views
4

選擇一個單元格時觸發pickerview擁有的tableView 7個細胞是這樣的: enter image description here我如何在一個的tableView

我想引發一些事件,當你選擇一個單元格。例如,當您點擊用戶名行時,開始編輯用戶名。當你點擊性別行時,彈出內部有男性/女性選擇的底部的選擇器視圖。 據我知道,我需要把這些事件在這裏面:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

} 

但我不知道如何做到這一點。任何人有想法?先謝謝你。

回答

1

你是正確的動畫吧。將邏輯放在didSelectRowAtIndexPath中是一個好方法。

你如何做到這一點是寫代碼。沒有股票答案。

如果你想要的內容出現在當前窗口的頂部,那麼你將需要處理的是自己。在iPad上,您可以使用彈出窗口,但iPhone/iPod touch本身不支持彈出窗口。您可能會考慮使用爲iPhone提供彈出式支持的第三方彈出窗口庫。 Github上有好幾個,可能也有好幾個。我之前使用過一個,但它有幾個問題,所以我不會推薦它。

如果您確定呈現全新的視圖控制器,那麼只需在故事板中定義一個新的視圖控制器,給它一個唯一的標識符,使用instantiateViewControllerWithIdentifier創建它,然後presentViewController:animated:以模態方式顯示它。

0

UIPickerViewUIView的子類,因此您可以像添加和使用任何其他UIView對象一樣使用它。爲了您的特定回答,您應該創建一個UIPickerView的對象,並在必要時顯示並隱藏它。 因此,創建一個UIPickerView和裏面添加視圖表視圖中您添加的tableView以上和didSelectRowAtIndexPath設置pickerView.hidden = false

,你也可以從底部通過

UIView.animateWithDuration(1, animations: {() -> Void in 
      // And set final frame here 
     }) 
+0

通過設置視圖的框架做動畫是不可靠在自動佈局。通常您需要使用約束,更改約束上的常量,然後在動畫閉包中調用layoutIfNeeded。 –

1

基本上,你可以讓每個單元格都有自己的選擇器視圖。

open class DatePickerTableViewCell: UITableViewCell { 

    let picker = UIDatePicker() 

    open override func awakeFromNib() { 
    super.awakeFromNib() 
    picker.datePickerMode = UIDatePickerMode.date 
    } 

    open override var canBecomeFirstResponder: Bool { 
    return true 
    } 

    open override var canResignFirstResponder: Bool { 
    return true 
    } 

    open override var inputView: UIView? { 
    return picker 
    } 
    ... 
} 

,然後在didSelectRowAt,只是使細胞becomeFirstResponder

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
if let cell = tableView.cellForRow(at: indexPath) as? DatePickerTableViewCell { 
    if !cell.isFirstResponder { 
    _ = cell.becomeFirstResponder() 
    } 
} 
} 

您可以檢查我的庫的細節: https://github.com/hijamoya/PickerViewCell

相關問題