Customizing table cell in ABPeoplePickerNavigationController

穿精又带淫゛_ 提交于 2020-01-12 06:50:31

问题


I've spent some time searching for this answer on SO, but couldn't find it, so here goes:

I'm starting with an ABPeoplePickerNavigationController, and when a user taps a person, they'll be taken to an ABPersonViewController where they'll be able to select phone numbers and email addresses. After they're finished with the ABPersonViewController, they'll be taken back to the ABPeoplePickerNavigationController. Pretty simple stuff.

What I want is to add a detailLabel to the table cell they selected in ABPeoplePickerNavigationController after they chose a phone number or an email address. Something like "Email and phone number chosen" or "Phone number chosen".

Apple's documentation says:

 You should not need to subclass these controllers; the expected way to modify their behavior is by your implementation of their delegate.

The delegate methods provided won't handle this. Is there any way to accomplish this without subclassing myself? And, if I do have to subclass ABPeoplePickerNavigationController, which method would I override to update the detailLabel?

Thanks!


回答1:


This bit of code seems to work for me, it grabs the cell when the user selects a person and adds a check mark. I'm guessing you can tweak the cell in other ways at this point as well.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
UIView *view = peoplePicker.topViewController.view;
UITableView *tableView = nil;
for(UIView *uv in view.subviews)
{
    if([uv isKindOfClass:[UITableView class]])
    {
        tableView = (UITableView*)uv;
        break;
    }
}
if(tableView != nil)
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]];
    if(cell.accessoryType == UITableViewCellAccessoryNone){
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else{
        cell.accessoryType = UITableViewCellAccessoryNone;
    }        
    [cell setSelected:NO animated:YES];
}
return NO;
}



回答2:


I have idea of how to do it, i think it will be helpful to you , but never implemented like this. First you have to go with custom table . For that table you can give all the contact names from your addressbook. you can use http://developer.apple.com/library/mac/#documentation/userexperience/Reference/AddressBook/Classes/ABAddressBook_Class/Reference/Reference.html

just go through it you can understand .

you have to use these methods. 1) - (NSArray *)people you will get all people records into returned array. each record will have unique id , you have to retrieve it

ABRecord rec = [returnedArray objectAtIndex:0];

NSString *pid = rec.uniqueId

-(NSString *) uniqueId ( this is ABRecord property method )

once you got it you can retireve from your array what you want by using that recordid/ unique id .



来源:https://stackoverflow.com/questions/5270482/customizing-table-cell-in-abpeoplepickernavigationcontroller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!