iOS7风格的联系人选择器:MBContactPicker

分享到:

MBContactPicker 是一个iOS7风格的联系人选择器,可作为一个UICollectionView ,实现类似 iOS 7 的本地邮件联系人选择器的功能。

#import "ViewController.h"
#import "ContactObject.h"
#import "MBContactPicker.h"
@interface ViewController () <MBContactPickerDataSource, MBContactPickerDelegate>
@property (nonatomic) NSArray *contacts;
@property (weak, nonatomic) IBOutlet MBContactPicker *contactPickerView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contactPickerViewHeightConstraint;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *array = @[
@{@"Name":@"Contact 1", @"Title":@"CTO"},
@{@"Name":@"Contact 2", @"Title":@"CEO"}
];
NSMutableArray *contacts = [[NSMutableArray alloc] initWithCapacity:array.count];
for (NSDictionary *contact in array)
{
ContactObject *model = [[ContactObject alloc] init];
model.contactTitle = contact[@"Name"];
model.contactSubtitle = contact[@"Title"];
[contacts addObject:model];
}
self.contacts = contacts;
self.contactPickerView.delegate = self;
self.contactPickerView.datasource = self;
}
#pragma mark - MBContactPickerDataSource
// Use this method to give the contact picker the entire set of possible contacts.  Required.
- (NSArray *)contactModelsForContactPicker:(MBContactPicker*)contactPickerView
{
return self.contacts;
}
// Use this method to pre-populate contacts in the picker view.  Optional.
- (NSArray *)selectedContactModelsForContactPicker:(MBContactPicker*)contactPickerView
{
return @[];
}
#pragma mark - MBContactPickerDelegate
// Optional
- (void)contactCollectionView:(MBContactCollectionView*)contactCollectionView didSelectContact:(id<MBContactPickerModelProtocol>)model
{
NSLog(@"Did Select: %@", model.contactTitle);
}
// Optional
- (void)contactCollectionView:(MBContactCollectionView*)contactCollectionView didAddContact:(id<MBContactPickerModelProtocol>)model
{
NSLog(@"Did Add: %@", model.contactTitle);
}
// Optional
- (void)contactCollectionView:(MBContactCollectionView*)contactCollectionView didRemoveContact:(id<MBContactPickerModelProtocol>)model
{
NSLog(@"Did Remove: %@", model.contactTitle);
}
// Optional
// This delegate method is called to allow the parent view to increase the size of
// the contact picker view to show the search table view
- (void)didShowFilteredContactsForContactPicker:(MBContactPicker*)contactPicker
{
if (self.contactPickerViewHeightConstraint.constant <= contactPicker.currentContentHeight)
{
[UIView animateWithDuration:contactPicker.animationSpeed animations:^{
CGRect pickerRectInWindow = [self.view convertRect:contactPicker.frame fromView:nil];
CGFloat newHeight = self.view.window.bounds.size.height - pickerRectInWindow.origin.y - contactPicker.keyboardHeight;
self.contactPickerViewHeightConstraint.constant = newHeight;
[self.view layoutIfNeeded];
}];
}
}
// Optional
// This delegate method is called to allow the parent view to decrease the size of
// the contact picker view to hide the search table view
- (void)didHideFilteredContactsForContactPicker:(MBContactPicker*)contactPicker
{
if (self.contactPickerViewHeightConstraint.constant > contactPicker.currentContentHeight)
{
[UIView animateWithDuration:contactPicker.animationSpeed animations:^{
self.contactPickerViewHeightConstraint.constant = contactPicker.currentContentHeight;
[self.view layoutIfNeeded];
}];
}
}
// Optional
// This delegate method is invoked to allow the parent to increase the size of the
// collectionview that shows which contacts have been selected. To increase or decrease
// the number of rows visible, change the maxVisibleRows property of the MBContactPicker
- (void)contactPicker:(MBContactPicker*)contactPicker didUpdateContentHeightTo:(CGFloat)newHeight
{
self.contactPickerViewHeightConstraint.constant = newHeight;
[UIView animateWithDuration:contactPicker.animationSpeed animations:^{
[self.view layoutIfNeeded];
}];
}
@end

iOS7风格的联系人选择器:MBContactPicker

项目主页:http://www.open-open.com/lib/view/home/1388915798609

昵    称:
验证码:

相关文档: