私は、この問題に対する比較的簡単な解決策を持っています。非表示のカスタム ボタンを使用すると、ジェスチャ認識機能なしでタップ機能を実現できます。このソリューションは、1 つのコンポーネントのピッカーで機能しますが、より多くのコンポーネントで動作するように適応できると確信しています。
最初に、Interface Builder またはプログラムでボタンを追加します。非表示にし、ピッカーと同じ幅にしてから、ピッカーの正確な中央に配置し、ビュー階層でピッカーの前にも配置します。
このような IBAction を使用して、ピッカーを表示しています。ただし、ピッカーをどのように表示および非表示にするかは、実際にはあなた次第です。
- (IBAction)showPicker:(id)sender
{
_picker.hidden = NO;
_buttonPicker.hidden = NO;
}
ピッカー値を選択するためのすべてのアクションは、UIControlEventTouchUpInside イベントの IBAction で発生します。たとえば、次のようになります。
- (IBAction)selectPicker:(id)sender
{
//Hide the button so that it doesn't get in the way
_buttonPicker.hidden = YES;
//Make sure we're within range
NSInteger max = _values.count;
NSInteger row = [_picker selectedRowInComponent:0];
if(row >= 0 && row < max) {
NSString *value = [_values objectAtIndex:row];
//Set the label value and hide the picker
_label.text = value;
_picker.hidden = YES;
}
}
この回答のコードを作業コードから少し変更したので、壊れている場合はお詫びします。