サブビューとしてUIScrollView
いくつかあるものがあります。UIViews
の1つで、UIView
を作成する必要がありUIButton
ます。クリックUIPickerView
すると、が表示されます。ボタンをファーストレスポンダーにできる場合は、のデフォルトのアクションにより、UIScrollView
上にスクロールしてUIPickerView
...があります。これを達成する方法はありますか?サブクラス化する必要がありUIControl
ますか?
3 に答える
これを使用できます:
-(void)btnAction{
UITextView* uitextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
uitextView.inputView = thePickerView;
[self.view addSubview:uitextView];
[uitextView becomeFirstResponder];}
これはボタンの追加です。この場合は _scrollView に直接、簡単に変更できます。
UIButton *btn = [[UIButton alloc] init];
// button customization
[btn addTarget:self action:@selector(showPickerView:) forControlEvents:UIControlEventTouchUpInside];
[_scrollView addSubview:btn];
[btn release]; // if non-ARC
その後、showPickerView:
メソッドを実装する必要があります
- (void)showPickerView:(UIButton*)sender
{
UIPickerView *picker = [[UIPickerView alloc] init];
picker.tag = 998998;
// picker customization..
[self.view insertSubview:picker aboveSubview:_scrollView];
[picker release]; // if non-ARC
}
ここで重要な部分は、ピッカービューから閉じる/完了ボタンが起動されたときに、ピッカーを非表示にする必要があることです。私の頭に浮かぶ最も簡単な方法は
if([self.view viewWithTag:998998] != nil) {
[[self.view viewWithTag:998998] removeFromSuperview]
}
UIPickerView を cell.picker = [[UIPickerView alloc] initWithFrame:CGRectZero]; に初期化します。サブクラス内(タップしたときにピッカーを表示したいものは何でも)。次に、そのクラスの inputView メソッドをオーバーライドし、そのメソッド内で UIPickerView を返します。このメソッドは、オブジェクトがファーストレスポンダーになったときに表示するカスタム入力ビューを設定します。キーボードのようにすべてをアニメーション化します。スクロールビューを上にスクロールするには、キーボードの場合と同じ方法でこれを処理する必要があります (これは、scrollView の contentOffset を設定することによって行われます)。これはここにあります:アップルのドキュメントリンク. オブジェクトがファーストレスポンダを辞任し、ファーストレスポンダになったときに通知があるため、ここからはかなり簡単です。キーボード通知の代わりにこれらの通知を使用し、キーボードの代わりにデフォルトの UIPickerView サイズを使用してください。
- (void)initalizeInputView {
self.picker = [[UIPickerView alloc] initWithFrame:CGRectZero];
self.picker.showsSelectionIndicator = YES;
self.picker.autoresizingMask = UIViewAutoresizingFlexibleHeight;
}
- (UIView *)inputView {
return self.picker;
}