3

UITextViewキーボードの上部に が取り付けられているFacebook Messenger アプリを複製しようとしています。

このアプリの性質上、キーボードが表示viewされたときに手動で上下にスクロールするのではなく、接続する必要があります。ScrollView

これは、 を使用して実現できますinputAccessoryView

ここでドキュメントを読みました。

ドキュメントは非常に簡潔で、次のように述べています。

「このプロパティは通常、UITextField および UITextView オブジェクトに対して提示されるシステム提供のキーボードにアクセサリ ビューをアタッチするために使用されます。

この読み取り専用プロパティの値は nil です。カスタム コントロールをシステム提供の入力ビュー (システム キーボードなど) またはカスタム入力ビュー (inputView プロパティで提供するもの) にアタッチする場合は、このプロパティを UIResponder サブクラスで読み取り/書き込みとして再宣言します。

このプロパティを使用して、カスタム アクセサリ ビューを管理できます。レシーバーがファーストレスポンダーになると、レスポンダー インフラストラクチャはアクセサリ ビューを表示する前に適切な入力ビューにアタッチします。」

プロパティを宣言しようとしました

@interface CommentViewController ()
@property (nonatomic, readwrite, retain) UIView *inputAccessoryView;
@end

そして、それを設定します:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)];
    [view setBackgroundColor:[UIColor greenColor]];

    self.inputAccessoryView = view;

}

次に、これらの両方を呼び出してみました:

  1. [self.tableView becomeFirstResponder];

  2. [view becomeFirstResponder];

何も起こりません。私は何を間違っていますか?

*注 - 追加情報: をとして添付しUITableViewControllerたい を使用しています。ビューが機能するようになったら、a などを追加しますが、これは主に例です。UIViewinputAccessoryViewUITextView

どんな助けでも大歓迎です!

4

4 に答える 4

9

純粋な UIView ではなく、textField または textView に入力アクセサリを追加します。

self.mytextField.inputAccessoryView = view;
于 2015-12-09T06:14:25.260 に答える
-2

私はこの回答を投稿して、他の人に私の正確なコードとそれが実際にどれほど簡単だったかを示していますが、すべての功績は MadNik にあります。

キーボードが必要なView Controllerクラスで、実装に次を追加します。

@implementation CommentViewController {
    UIView *toolbar;
    UITextView *commentTextView;
    UIButton *postComment;
}

これtoolbarがキーボードにドッキングされる実際のビューであり、残りのオブジェクトはビューの上に表示されます。

次に、 を開始してtoolbarそのフレームを設定するだけです。

toolbar = [[UIView alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-50, self.view.frame.size.width, 50)];

[toolbar setBackgroundColor:[UIColor whiteColor]];

ツールバーのフレームを、最初はビュー コントローラーの一番下に配置します。

次に、ツールバーに必要な残りのオブジェクト ( と など) を開始しUITextFieldますUIButton。好きなようにレイアウトしてください:

commentTextView = [[UITextView alloc]initWithFrame:CGRectMake(8, 8, self.view.frame.size.width - 16 - 75, 34)];
[commentTextView setBackgroundColor:[UIColor colorWithWhite:0.97 alpha:1]];
commentTextView.layer.cornerRadius = 5;
[commentTextView setFont:[UIFont fontWithName:@"Avenir Next" size:20]];
[commentTextView setTextColor:[UIColor colorWithWhite:0.35 alpha:1]];

postComment = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width-75, 0, 75, 50)];
[postComment setTitle:@"Post" forState:UIControlStateNormal];
[postComment.titleLabel setFont:[UIFont fontWithName:@"Avenir Next" size:20]];
[postComment setTitleColor:[UIColor colorWithRed:(255/255.0) green:(40/255.0) blue:(80/255.0) alpha:1.0] forState:UIControlStateNormal];

次に、オブジェクトをツールバーに追加します。

[toolbar addSubview:commentTextView];
[toolbar addSubview:postComment];

ここで魔法が起こります:UITextViewの inputAccessoryView を、キーボードにドッキングしたい任意のビューに設定するだけです。

この場合はです。これはtoolbartoolbarが他のすべてを保持するドックとして機能しているためです。

あとは、toolbarビュー コントローラーに を追加するだけです。UITextViewtoolbartoolbar

を使用しているため、ウィンドウUITableViewControllerに追加する必要がありました。toolbar

[[[UIApplication sharedApplication]delegate].window addSubview:toolbar];

とても簡単!余分なクラスや何かを作る必要はありません!

于 2015-12-09T10:57:13.583 に答える