私人通讯录功能详细实现

私人通讯录

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

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


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

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

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


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

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


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

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

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

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值