[英]Swift 4.1: SelectRow for UIPickerView does not raise the delegate didSelectRow
[英]UIPickerView - 1st row selection does not call didSelectRow (in Swift)
我有一個UIPickerView
,當用戶選擇一行並按下名為“開始”的按鈕時,所選行將啟動特定方法。
為了檢測選擇器中的選定行(並更新變量),我使用以下代碼:
var picked = 15
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if row == 0 {
picked = 1
}
else if row == 1 {
picked = 2
}
else if row == 2 {
picked = 3
}
}
每當用戶對選擇器選擇進行更改時,都會觸發此方法。 但是,如果用戶未在選擇器上選擇任何值(bc用戶要選擇已選擇的第一個選項),則不會調用此方法。
我知道有關此問題已經有一個很好回答的問題,但這對於目標C( uipickerview-1st-row-selection-does-not-call-didselectrow )。 我想要Swift的答案,因為我沒有目標C技能。
所以我的問題是:如何讓選擇器的第一個選項(已選擇)被用戶檢測為選定行? (因此,此已選擇的行將更新變量)
我在viewDidAppear
添加了代碼:
picker1.selectRow(2, inComponent: 0, animated: true)
// scrolls the specified row to center.
但這僅顯示指定的行,而不返回didSelectRow函數的指定行。 所以這對我沒有幫助
解決該問題的一種簡單的用戶友好方法是使每個選擇器中的零行成為用戶邀請,而不是要處理的值。 您可以在零行中放置“選擇”或“ ---”之類的內容。 這樣,用戶將被迫與選擇器進行交互,並且不會依賴被動地坐在那里的默認值。 這在多組件選取器中特別有用,在該組件中,用戶可能會更改部分組件,但不能更改所有組件。
該文檔說(在https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIPickerViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIPickerViewDelegate/pickerView:didSelectRow:inComponent:) :“當用戶在組件中選擇一行時,由選擇器視圖調用。”。 因此,您應該通過-(NSInteger)selectedRowInComponent:(NSInteger)component / func selectedRowInComponent(_ component:Int)-> Int解散選擇器本身的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.