【问题标题】:How can you make a UITabBarController go directly to your address book?如何让 UITabBarController 直接进入你的地址簿?
【发布时间】:2013-02-23 06:23:21
【问题描述】:

我看到了一个实现,但我需要帮助来了解它的具体去向。所以我打开了 TabBarController,我看到要放入这样的代码

picker = [[ABPeoplePickerNavigationController alloc] init];
// place the delegate of the picker to the control
picker.peoplePickerDelegate = self;
picker.view.frame = self.view.bounds;
[self.view addSubview:picker.view];

这是最初的问题 “我想在我的UITabBarController它也嵌入在 UINavigationController)中显示一个UIAddressBook,而不是每次都以模态方式显示它。换句话说,我想访问一个地址簿在一个已经存在的标签栏控制器和导航控制器中。当我以模态方式显示它时,这两个消失了,因为它是一个全新的视图。但是,我找不到嵌入它的文档。有人有任何指针吗?

所以为了澄清我的立场,我有一个新的 TabBar 项目设置,我希望第二个标签栏自动打开联系人。我该怎么做呢?抱歉我的无知,我对 iOS 很陌生。

【问题讨论】:

    标签: iphone ios objective-c tabbarcontroller


    【解决方案1】:

    这是您/初学者使用的简单示例。

    以下代码可帮助您从联系人列表中获取大部分人员数据。

    首先在你的类.h文件中添加所有的Delegate和Datasource方法

    <ABPeoplePickerNavigationControllerDelegate,ABPersonViewControllerDelegate,ABNewPersonViewControllerDelegate,ABUnknownPersonViewControllerDelegate>
    

    创建ABPeoplePickerNavigationController

    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
            [[picker navigationBar] setBarStyle:UIBarStyleBlack];
            picker.peoplePickerDelegate = self;
            // Display only a person's phone, email, and birthdate
            NSArray *displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonPhoneProperty],nil];
    
    
            picker.displayedProperties = displayedItems;
            // Show the picker
            [self presentModalViewController:picker animated:YES];
            [picker release];
    

    添加ABPeopelPickerNavigationController的Following Delegate和DataSource方法

    #pragma mark - ABPeopelPickerNavigationController Delegate and DataSource Methods
    
    - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
    {
        [self dismissModalViewControllerAnimated:YES];
    }
    
    
    - (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownCardViewController didResolveToPerson:(ABRecordRef)person
    {
    }
    
    - (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person
    {
    }
    
    - (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
    {
        return YES;
    }
    
    - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier;
    {
        return YES;
    }
    

    以下代码用于从电话簿中获取人员的所有信息

    - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
    {
        ABAddressBookRef addressBook = ABAddressBookCreate();
    
        int i;
        NSString *strName = @"";
        NSString* company = @"";
        NSString *address = @"";
        NSString *suburb = @"";
        NSString *postalcode = @"";
        NSString *state = @"";
        NSString *country = @"";
        NSString *mobile = @"";
        NSString *phone = @"";
        NSString *emailid = @"";
    
    
        strName = (NSString *)ABRecordCopyCompositeName((ABRecordRef) person);
        CFStringRef name = ABRecordCopyCompositeName((ABRecordRef) person);
        company  = (NSString *)ABRecordCopyValue((ABRecordRef) person, kABPersonOrganizationProperty);
    
        NSArray*  allPeople = (NSArray *)ABAddressBookCopyPeopleWithName(addressBook,name);
        CFRelease(name);
    
        for (i = 0; i < [allPeople count]; i++)
        {
            ABRecordRef record = [allPeople objectAtIndex:i];
    
            ABMutableMultiValueRef multiValue = ABRecordCopyValue(record, kABPersonAddressProperty);
            for(CFIndex i=0; i<ABMultiValueGetCount(multiValue); i++)
            {
                NSString* HomeLabel = (NSString*)ABMultiValueCopyLabelAtIndex(multiValue, i);
                if([HomeLabel isEqualToString:@"_$!<Home>!$_"])
                {
                    CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multiValue, i);
                    address = [NSString stringWithFormat:@"%@", CFDictionaryGetValue(dict, kABPersonAddressStreetKey)];
                    suburb = [NSString stringWithFormat:@"%@", CFDictionaryGetValue(dict, kABPersonAddressCityKey)];
                    postalcode = [NSString stringWithFormat:@"%@", CFDictionaryGetValue(dict, kABPersonAddressZIPKey)];
                    state = [NSString stringWithFormat:@"%@", CFDictionaryGetValue(dict, kABPersonAddressStateKey)];
                    country = [NSString stringWithFormat:@"%@", CFDictionaryGetValue(dict, kABPersonAddressCountryKey)];
    
                    CFRelease(dict);
                }
                CFRelease(HomeLabel);
            }
            CFRelease(multiValue);
        }
        CFRelease(allPeople);
    
    
        ABMultiValueRef phones =(NSString*)ABRecordCopyValue(person, kABPersonPhoneProperty);
        NSString* mobileLabel = nil;
        for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++)
        {
            mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
            if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
            {
                mobile = (NSString*)ABMultiValueCopyValueAtIndex(phones, i);
                NSLog(@"phone   %@",mobile);
            }
            else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
            {
                phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, i);
                NSLog(@"phone   %@",phone);
    
                CFRelease(mobileLabel);
                break ;
            }
            CFRelease(mobileLabel);
    
        }
        CFStringRef value, label;
        ABMutableMultiValueRef multi = ABRecordCopyValue(person, kABPersonEmailProperty);
        CFIndex count = ABMultiValueGetCount(multi);
        if (count == 1)
        {
            value = ABMultiValueCopyValueAtIndex(multi, 0);
            emailid = (NSString*) value;
            NSLog(@"self.emailID   %@",emailid);
            CFRelease(value);
        }
        else
        {
            for (CFIndex i = 0; i < count; i++)
            {
                label = ABMultiValueCopyLabelAtIndex(multi, i);
                value = ABMultiValueCopyValueAtIndex(multi, i);
    
                // check for Work e-mail label
                if (CFStringCompare(label, kABWorkLabel, 0) == 0)
                {
                    emailid = (NSString*) value;
                    NSLog(@"self.emailID   %@",emailid);
                }
                else if(CFStringCompare(label, kABHomeLabel, 0) == 0)
                {
                    emailid = (NSString*) value;
                    NSLog(@"self.emailID   %@",emailid);
                }
    
                CFRelease(label);
                CFRelease(value);
            }
        }
        CFRelease(multi);
    
            }
    
    
        CFRelease(phones);
        CFRelease(addressBook);
        [self dismissModalViewControllerAnimated:YES];
    
        return NO;
    
    }
    

    有关更多信息,请阅读 thisthis 教程。

    谢谢:)

    【讨论】:

    • iPatel,谢谢。我已经看过这两者,就苹果代码而言,我已经完成了通讯录和快速联系人。我的问题更多的是如何将这些示例与 tabBar 图标联系起来?
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多