首页 > 代码库 > 私人通讯录功能详细实现

私人通讯录功能详细实现

私人通讯录

一、根据segue对象实现控制器的跳转
//根据segue对象的标示去storyboard找对应的的线
[selfperformSegueWithIdentifier:@"login"sender:nil];

//跳转前控制器之间传值(顺传)
- (
void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
   
SUNContactsController *contacts = segue.destinationViewController;
    contacts.
navigationItem.title=self.accountF.text;
}


二、如果输入框中没有内容,登录按钮是禁用的。
有两种方法
第一种,通知:
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFieldChange)name:UITextFieldTextDidChangeNotificationobject:self.accountF];
[[
NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFieldChange)name:UITextFieldTextDidChangeNotificationobject:self.pwdF];

- (void)textFieldChange
{
   
self.loginBtn.enabled= (self.accountF.text.length  && self.pwdF.text.length);
}

// 在dealloc方法里面移除通知
- (void)dealloc
{
   
// 移除通知
    [[
NSNotificationCenterdefaultCenter]removeObserver:self];
}


第二种方法,addTarget,因为UITextField是继承UIControl
[self.accountFaddTarget:selfaction:@selector(textFieldChange)forControlEvents:UIControlEventEditingChanged];
[
self.pwdFaddTarget:selfaction:@selector(textFieldChange)forControlEvents:UIControlEventEditingChanged];

- (void)textFieldChange
{
    
self.loginBtn.enabled = (self.accountF.text.length  && self.pwdF.text.length );
}


三、注销按钮功能的实现
- (IBAction)logout
{
   
UIActionSheet *actionSheet = [[UIActionSheetalloc]initWithTitle:@"是否注销"delegate:selfcancelButtonTitle:@"取消"destructiveButtonTitle:@"注销"otherButtonTitles:nil,nil];
    [actionSheet
showInView:self.view];
}

#pragma mark -实现注销按钮的功能
- (void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
   
if (buttonIndex ==0) {
        // 将栈顶控制器移除
        [
self.navigationControllerpopToRootViewControllerAnimated:YES];
    }
}

四、控制器跳转之后,文本框变成第一响应者
- (void)viewDidAppear:(BOOL)animated
{
        [
self.accountFbecomeFirstResponder];
}
注意:
viewDidAppear方法表示view显示完毕(已经显示到窗口)

五、控制器之间跳转(逆传值)
//回到联系人列表
[
self.navigationControllerpopViewControllerAnimated:YES];
// 使用代理的方式把一个对象传递给控制器
5.1 首先定义一个代理
@protocolSUNAddContactsControllerDelegate <NSObject>
- (
void)addContactsController:(SUNAddContactsController*)addContactsController didContactsItem:(SUNContactsItem*)contactsItem;
@end
5.2 然后把对象传递给控制器
SUNContactsItem*contactsItem = [[SUNContactsItemalloc]init];
contactsItem.
account=self.account.text;
contactsItem.
pwd=self.pwd.text;
if([self.delegaterespondsToSelector:@selector(addContactsController:didContactsItem:)]) {
   [
self.delegateaddContactsController:selfdidContactsItem:contactsItem];
}

5.3 在控制器实现代理的方法
#pragma mark -实现SUNAddContactsControllerDelegate的代理
- (void)addContactsController:(SUNAddContactsController*)addContactsController didContactsItem:(SUNContactsItem*)contactsItem
{
    [
self.arrayMaddObject:contactsItem];
    [
self.tableViewreloadData];
}

5.4 如果两个控制器之间跳转通过segue对象,在prepareForSegue这个方法里面判断一下
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
   
if ([segue.destinationViewControllerisKindOfClass:[SUNAddContactsControllerclass]]) {
       
SUNAddContactsController *addContactsController = segue.destinationViewController;
        addContactsController.
delegate=self;
    }
}


私人通讯录功能详细实现