Пытаясь показать список контактов (подборщик людей, как видно из AddressBook), когда я нажимаю кнопку, что я делаю не так? (используя теос)
Я собираю этот твик с теосом. Я пытаюсь сделать кнопку внутри центра управления на iPhone, которая при нажатии вызывает список контактов. Что я делаю неправильно?
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@interface SBAppSliderScrollingViewController : UIViewController
@property (nonatomic, strong) UIButton *button;
-(void)loadView;
@end
%hook SBAppSliderScrollingViewController
-(void)viewDidLoad {
%orig;
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"Contacts" forState:UIControlStateNormal];
button.frame = CGRectMake(-25, 7, 150, 37);
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
%new
-(void)buttonPressed:(id)sender {
ABPeoplePickerNavigationController *peoplePicker =
[[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;
[self presentModalViewController:peoplePicker animated:YES];
}
%end
Это мой make-файл:
ARCHS = armv7 arm64
include theos/makefiles/common.mk
TWEAK_NAME = Contacts
Contacts_FILES = Tweak.xm
Contacts_FRAMEWORKS = UIKit
Contacts_FRAMEWORKS = AddressBook
Contacts_FRAMEWORKS = AddressBookUI
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard; killall -9 backboardd"
Это ошибка, которую я получаю при компиляции твика с theos:
Brandons-Mac:contacts root# make package
Making all for tweak Contacts...
Preprocessing Tweak.xm...
Compiling Tweak.xm...
Tweak.xm:26:37: error: assigning to
'id<ABPeoplePickerNavigationControllerDelegate>' from incompatible type
'CKTranscriptCollectionViewController *'
peoplePicker.peoplePickerDelegate = self;
^ ~~~~
1 error generated.
make[2]: *** [obj/Tweak.xm.d559d84f.o] Error 1
make[1]: *** [internal-library-all_] Error 2
make: *** [Contacts.all.tweak.variables] Error 2
Brandons-Mac:contacts root#
1 ответ
Вы внедрили методы делегата этого?
Ты должен написать
@interface SBAppSliderScrollingViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate >
Теперь реализуйте методы делегата ABPeoplePickerNavigationController
-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
return YES;
}
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
// ensure user picked a phone property
if(property == kABPersonPhoneProperty)
{
ABMultiValueRef phone = ABRecordCopyValue(person, property);
NSString *phn = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phone, ABMultiValueGetIndexForIdentifier(phone, identifier));
//Your phone no
[self dismissViewControllerAnimated:YES completion:nil];
}
else{
}
/* Display message if selection is not a phone number */
return NO;
}
-(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{
[self dismissViewControllerAnimated:YES completion:nil];
}
И второе, что вы не должны использовать [self presentModalViewController:peoplePicker animated:YES];
вместо этого используйте
[self presentViewController:peoplePicker animated:YES completion:nil];