4

私のアプリには、1 つのメッセージを複数のユーザーに同時に送信するためのコンポーネントがあります。

Facebookのメッセージ作成と同様に実装したいと思います。ローカル通知で uitextfield を使用することで、UITableView を次のようにフィルター処理できます。

self.searchTextFieldObserver = [[NSNotificationCenter defaultCenter]
                                    addObserverForName:UITextFieldTextDidChangeNotification
                                    object:self.searchTextView
                                    queue:[NSOperationQueue mainQueue]
                                    usingBlock:^(NSNotification *note) {

                                        if ([self.displayArray count]) {
                                            NSArray *tempUsersArray = nil;
                                            NSArray *tempNonUsersArray = nil;
                                            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fullName CONTAINS[cd] %@", self.searchTextView.text];

                                            self.displayArray = [MyAddressBook sortedContacts:self.contacts];

                                            if ([self.searchTextView.text length] > 0) {
                                                tempUsersArray = [self.displayArray[0] filteredArrayUsingPredicate:predicate];


                                                self.displayArray = @[tempUsersArray];
                                            }

                                        }

                                        [self.tableView reloadData];
                                    }];

これは期待どおりに機能します...テキストフィールドに入力を提供していると、テーブルがフィルタリングされます。私が実装したいのは、このアプローチです:

FB画像

テーブル ビューを検索して 1 人のユーザーを選択すると、そのユーザーのニックネームがテキスト フィールドに挿入され、述語が空の文字列にリセットされるため、フィルタリングを再開できます。戻るボタンは既に挿入されている名前を選択し、2 回目のバックスペース タップでそれを削除する必要があります。

これについてしばらく考えていたのですが、思いついたのは、複数の要素を重ねて使用することだけでした。UITextView は、ユーザーが追加されるとフレームを変更します (UILabel のテキストのソースである配列に保存され、テキストビューのフレームを部分的に置き換えます) が、既に選択したユーザーを削除する可能性があったときに壁にぶつかりました。

別のアプローチや、私に役立つライブラリについて知っていれば、とてもうれしいです。

4

1 に答える 1

1

これを単なるコメントではなく回答にして申し訳ありませんが、コメントするにはまだ十分な評判がありません。

とにかく、textField に追加された選択されたユーザー名の配列がおそらくあると思います。次に、UIControlEventEditingChanged を使用してテキストの変更を確認し、呼び出されたメソッドで textField の現在のテキストを取得し、選択したユーザー名配列内の文字列と一致する文字列やコンマなどを取り除き、フィルター文字列を設定します。残り物に。

UIControlEventEditingChanged の使用方法の例として:

[_textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

textField からユーザーを削除する場合、同じ textFieldDidChange メソッドを使用して、追加されたユーザーの配列を textField と比較し、textField に存在しないユーザーが配列に存在する場合は、再フィルタリングする前にそれを削除します。 .

-スティーブン

于 2013-11-15T18:29:27.410 に答える