私人通讯录
一、根据segue
对象实现控制器的跳转
// 根据 segue 对象的标示去 storyboard 找对应的的线
[
self
performSegueWithIdentifier
:
@"login"
sender
:
nil
];
// 根据 segue 对象的标示去 storyboard 找对应的的线
//
跳转前控制器之间传值
(顺传)
- ( void )prepareForSegue:( UIStoryboardSegue *)segue sender:( id )sender
{
SUNContactsController *contacts = segue. destinationViewController ;
contacts. navigationItem . title = self . accountF . text ;
}
- ( 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 ];
[[ 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 );
}
{
self . loginBtn . enabled = ( self . accountF . text . length && self . pwdF . text . length );
}
// 在dealloc方法里面移除通知
- (
void
)dealloc
{
// 移除通知
[[ NSNotificationCenter defaultCenter ] removeObserver : self ];
}
{
// 移除通知
[[ 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 ];
[ self . pwdF addTarget : self action : @selector (textFieldChange) forControlEvents : UIControlEventEditingChanged ];
- (
void
)textFieldChange
{
self . loginBtn . enabled = ( self . accountF . text . length && self . pwdF . text . length );
}
{
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 ];
}
}
[ self . navigationController popToRootViewControllerAnimated : YES ];
}
}
四、控制器跳转之后,文本框变成第一响应者
- (
void
)viewDidAppear:(
BOOL
)animated
{
[ self . accountF becomeFirstResponder ];
}
{
[ self . accountF becomeFirstResponder ];
}
注意:
viewDidAppear方法表示view显示完毕(已经显示到窗口)
五、控制器之间跳转(逆传值)
//
回到联系人列表
[ self . navigationController popViewControllerAnimated : YES ];
[ self . navigationController popViewControllerAnimated : YES ];
// 使用代理的方式把一个对象传递给控制器
5.1 首先定义一个代理
@protocol
SUNAddContactsControllerDelegate <
NSObject
>
- ( void )addContactsController:( SUNAddContactsController *)addContactsController didContactsItem:( SUNContactsItem *)contactsItem;
@end
- ( 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];
}
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 ];
}
- ( 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 ;
}
}
{
if ([segue. destinationViewController isKindOfClass :[ SUNAddContactsController class ]]) {
SUNAddContactsController *addContactsController = segue. destinationViewController ;
addContactsController. delegate = self ;
}
}