0


私のiPhoneアプリケーションには、いくつかのUITextFieldを持つUIScrollViewがあります。
BSKeyboardControlsを使用して、フィールド間を移動するための[前へ]/[次へ]/[完了]ボタンを追加しました。ただし、選択したフィールドへのフォーカスは機能していません。つまり、テキストフィールドは、選択されていても実際にはキーボードの下にあります。
becomeFirstResponderがアクティブになりますが、フォーカスを設定しないでください。
何が間違っているのでしょうか? Hファイルに
感謝

#import "BSKeyboardControls.h"
...
@interface AddClientViewController : BaseViewController<UIAlertViewDelegate, UIScrollViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate, UITextViewDelegate, BSKeyboardControlsDelegate>
...
@property (strong, nonatomic) IBOutlet UITextField *firstName;
@property (strong, nonatomic) IBOutlet UITextField *lastName;
@property (strong, nonatomic) IBOutlet UITextField *email;
@property (strong, nonatomic) IBOutlet UITextField *mobile;
@property (strong, nonatomic) IBOutlet UITextField *birthday;
@property (strong, nonatomic) IBOutlet UITextField *anniversary;
@property (strong, nonatomic) IBOutlet UITextField *street;
@property (strong, nonatomic) IBOutlet UITextField *city;
@property (strong, nonatomic) IBOutlet UITextField *state;
@property (strong, nonatomic) IBOutlet UITextField *zip;
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;

@property (nonatomic, strong) BSKeyboardControls *keyboardControls;
....

Mファイル内

- (void)viewDidLoad
{
...
    NSArray *fields = @[ self.firstName, self.lastName,
    self.email, self.mobile,
    self.birthday, self.anniversary,
    self.street, self.city, self.state, self.zip];

    [self setKeyboardControls:[[BSKeyboardControls alloc] initWithFields:fields]];
    [self.keyboardControls setDelegate:self];
}

- (void)keyboardControlsDonePressed:(BSKeyboardControls *)keyboardControls
{
    [keyboardControls.activeField resignFirstResponder];
}
- (void)keyboardControls:(BSKeyboardControls *)keyboardControls directionPressed:(BSKeyboardControlsDirection)direction
{
    UIView *view = keyboardControls.activeField.superview.superview;
    [self.scrollView scrollRectToVisible:view.frame animated:YES];
}
- (void)keyboardControls:(BSKeyboardControls *)keyboardControls selectedField:(UIView *)field inDirection:(BSKeyboardControlsDirection)direction
{
    UIView *view = keyboardControls.activeField.superview.superview;
    [self.scrollView scrollRectToVisible:view.frame animated:YES];
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self.keyboardControls setActiveField:textField];
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
    [self.keyboardControls setActiveField:textView];
}

BSKeyboardControlsのsetActiveField

- (void)setActiveField:(id)activeField
{
    if (activeField != _activeField)
    {
        if ([self.fields containsObject:activeField])
        {
            _activeField = activeField;

            if (![activeField isFirstResponder])
            {
                [activeField becomeFirstResponder];
            }

            [self updateSegmentedControlEnabledStates];
        }
    }
}
4

1 に答える 1

4

UITextFieldsでUIScrollViewを使用しているscrollRectToVisibleため、UIScrollviewのメソッドを、おおよそ次のようなメソッドで使用できます。

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [_myScrollView scrollRectToVisible:textField.frame animated:YES];
}

これを行うには、がスクロールビューの各テキストフィールドのであるUIViewControllerかどうかを確認する必要があります。UITextFieldDelegateこれは、UIViewControllerのviewDidLoadメソッドで行うことができます。

[textField1 setDelegate:self];
[textField2 setDelegate:self];

...等々

于 2013-02-05T07:14:19.143 に答える