我正在尝试创建一个名称自动完成的搜索栏,在图像中看起来像这样。
有谁知道我如何能够实现这一目标?
看看开源库Three20TTMessageController
中的和。这正是你想要的:TTMessageRecipientField
首先,您需要一个包含联系人姓名的数组:
//Add Address Book framework
#import <AddressBook/AddressBook.h>
--------------------
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *allPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *firstNames = [NSMutableArray alloc] init];
for(NSUInteger personIndex = 0; personIndex <= [allPeople count]; personIndex++){
ABRecordRef person = (__bridge ABRecordRef)[allPeople objectAtIndex: incrementer];
firstNameString = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
[firstNames addObject: firstNameString];
}
所以firstNames
数组现在包含了所有人的数组;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithFrame:CGRectMake(your, values, go, here) reuseIdentifier:@"MyIdentifier"];
}
cell.text = [firstNames objectAtIndex: indexPath.row];
}
到目前为止,您有一个包含所有名字的表格视图。确保在协议UITableViewDataSource
和UITableViewDelegate
. 还要确保firstNames
在头文件中将数组声明为属性,以确保在整个 .m 文件中都可以访问它,因为如果不这样做,则无法在cellForRowAtIndexPath:
方法中访问它。
要实现自动补全,请按照此处关于自定义自动补全值的 Ray Wenderlich 的教程进行操作。然后使用人们的名字数组作为自定义值。