03通讯录(搭建编辑界面)

//
//  XMGContactViewController.h
//  小码哥通讯录

#import <UIKit/UIKit.h>
@class XMGContact;
@interface XMGContactViewController : UITableViewController

@end
//
//  XMGContactViewController.m
//  小码哥通讯录//
#import "XMGContactViewController.h"
#import "XMGAddViewController.h"
#import "XMGEditViewController.h"
#import "XMGContact.h"
@interface XMGContactViewController ()<UIActionSheetDelegate,XMGAddViewControllerDelegate>

@property (nonatomic, strong) NSMutableArray *contacts;

@end

@implementation XMGContactViewController

- (NSMutableArray *)contacts
{
    if (_contacts == nil) {

        _contacts = [NSMutableArray array];

    }
    return _contacts;
}

// 跳转之前的时候调用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    // 给添加控制器传递联系人控制器属性
    XMGAddViewController *addVc = segue.destinationViewController;

    addVc.delegate = self;

}

#pragma mark - 添加控制器代理方法
- (void)addViewController:(XMGAddViewController *)addVc didClickAddBtnWithContact:(XMGContact *)contact
{
    // 把添加界面的联系人模型传递到联系人界面

    // 把联系人模型保存到数组
    [self.contacts addObject:contact];

    // 刷新表格
    [self.tableView reloadData];

}

// 点击注销的时候调用
- (IBAction)logout:(id)sender {

    // 弹出actionSheet
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"是否注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"注销" otherButtonTitles:nil, nil];

    [sheet showInView:self.view];

}
#pragma mark - UIActionSheetDelegate
// 点击UIActionSheet控件上的按钮调用
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0) { // 点击了注销

        [self.navigationController popViewControllerAnimated:YES];

    }

}

- (void)viewDidLoad {
    [super viewDidLoad];

//    // 取消分割线
//    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    // tableView有数据的时候才需要分割线

    // 开发小技巧:快速取消分割线
    self.tableView.tableFooterView = [[UIView alloc] init];

}

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.contacts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // 创建标示符
    static NSString *ID = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
    }

    // 获取模型
    XMGContact *c = self.contacts[indexPath.row];

    cell.textLabel.text = c.name;
    cell.detailTextLabel.text = c.phone;

    return cell;
}

#pragma mark - tableView代理方法
// 点击cell的时候调用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 加载storyboard
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    // 创建编辑控制器
     XMGEditViewController *editVc = [storyboard instantiateViewControllerWithIdentifier:@"edit"];

    editVc.contact = self.contacts[indexPath.row];

    // 跳转到编辑界面
    [self.navigationController pushViewController:editVc animated:YES];

}
@end
//
//  XMGEditViewController.h
//  小码哥通讯录

#import <UIKit/UIKit.h>

@class XMGContact;

@interface XMGEditViewController : UIViewController

@property (nonatomic, strong) XMGContact *contact;

@end
//
//  XMGEditViewController.m
//  小码哥通讯录
#import "XMGEditViewController.h"
#import "XMGContact.h"

@interface XMGEditViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *phoneField;
@property (weak, nonatomic) IBOutlet UIButton *saveBtn;

@end

@implementation XMGEditViewController

/*
 控制器之间传值:一定要注意控制器的子控件有没有加载,一定要在子控件加载完成的时候才去给子控件赋值,一般在viewDidLoad给控件赋值。

 */
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // 设置导航条的标题
    self.title = @"查看/编辑界面";

    // 设置导航条右边的按钮
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStyleDone target:self action:@selector(edit:)];

    // 给文本框
    _nameField.text = _contact.name;
    _phoneField.text = _contact.phone;

    // 给文本框添加监听器,及时监听文本框内容的改变
    [_nameField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
    [_phoneField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];

    // 判断下登录按钮能否点击
    [self textChange];

}

// 任一一个文本框的内容改变都会调用
- (void)textChange
{
    _saveBtn.enabled = _nameField.text.length && _phoneField.text.length;

}

// 点击编辑的时候调用
- (void)edit:(UIBarButtonItem *)item
{
    NSLog(@"%@",item);

    if ([item.title isEqualToString:@"编辑"]) {
        // 更改标题
        item.title = @"取消";

        // 让文本框允许编辑
        _nameField.enabled = YES;
        _phoneField.enabled = YES;

        // 弹出电话文本框的键盘
        [_phoneField becomeFirstResponder];

        // 显示保存按钮
        _saveBtn.hidden = NO;

    }else{
        // 更改标题
        item.title = @"编辑";

//        // 退出键盘
//        [self.view endEditing:YES];

        // 隐藏保存按钮
        _saveBtn.hidden = YES;

        // 让文本框不允许编辑
        _nameField.enabled = NO;
        _phoneField.enabled = NO;
    }

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

小码哥通讯录(保存功能)

//
//  XMGEditViewController.h
//  小码哥通讯录

#import <UIKit/UIKit.h>

@class XMGContact;

// 定义block类型别名
typedef void(^XMGEditViewControllerBlock)();

@interface XMGEditViewController : UIViewController

@property (nonatomic, strong) XMGContact *contact;

@property (nonatomic, strong) XMGEditViewControllerBlock block;

@end
//
//  XMGEditViewController.m
//  小码哥通讯录
#import "XMGEditViewController.h"
#import "XMGContact.h"

@interface XMGEditViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *phoneField;
@property (weak, nonatomic) IBOutlet UIButton *saveBtn;

@end

@implementation XMGEditViewController
// 点击保存的时候调用
- (IBAction)save:(id)sender {
    // 修改模型数据
    _contact.name = _nameField.text;
    _contact.phone = _phoneField.text;

#warning TODO:
    // 让小弟做事情,刷新表格
    if (_block) {

        _block();
    }

    // 回到上一个控制器
    [self.navigationController popViewControllerAnimated:YES];

}

/*
 控制器之间传值:一定要注意控制器的子控件有没有加载,一定要在子控件加载完成的时候才去给子控件赋值,一般在viewDidLoad给控件赋值。

 */
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // 设置导航条的标题
    self.title = @"查看/编辑界面";

    // 设置导航条右边的按钮
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStyleDone target:self action:@selector(edit:)];

    // 给文本框
    _nameField.text = _contact.name;
    _phoneField.text = _contact.phone;

    // 给文本框添加监听器,及时监听文本框内容的改变
    [_nameField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
    [_phoneField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];

    // 判断下登录按钮能否点击
    [self textChange];

}

// 任一一个文本框的内容改变都会调用
- (void)textChange
{
    _saveBtn.enabled = _nameField.text.length && _phoneField.text.length;

}

// 点击编辑的时候调用
- (void)edit:(UIBarButtonItem *)item
{
    NSLog(@"%@",item);

    if ([item.title isEqualToString:@"编辑"]) {
        // 更改标题
        item.title = @"取消";

        // 让文本框允许编辑
        _nameField.enabled = YES;
        _phoneField.enabled = YES;

        // 弹出电话文本框的键盘
        [_phoneField becomeFirstResponder];

        // 显示保存按钮
        _saveBtn.hidden = NO;

    }else{
        // 更改标题
        item.title = @"编辑";

//        // 退出键盘
//        [self.view endEditing:YES];

        // 隐藏保存按钮
        _saveBtn.hidden = YES;

        // 让文本框不允许编辑
        _nameField.enabled = NO;
        _phoneField.enabled = NO;

        // 还原数据
        _nameField.text = _contact.name;
        _phoneField.text = _contact.phone;
    }

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
//
//  XMGContactViewController.m
//  小码哥通讯录
#import "XMGContactViewController.h"
#import "XMGAddViewController.h"
#import "XMGEditViewController.h"
#import "XMGContact.h"
@interface XMGContactViewController ()<UIActionSheetDelegate,XMGAddViewControllerDelegate>

@property (nonatomic, strong) NSMutableArray *contacts;

@end

@implementation XMGContactViewController

- (NSMutableArray *)contacts
{
    if (_contacts == nil) {

        _contacts = [NSMutableArray array];

    }
    return _contacts;
}

// 跳转之前的时候调用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    // 给添加控制器传递联系人控制器属性
    XMGAddViewController *addVc = segue.destinationViewController;

    addVc.delegate = self;

}

#pragma mark - 添加控制器代理方法
- (void)addViewController:(XMGAddViewController *)addVc didClickAddBtnWithContact:(XMGContact *)contact
{
    // 把添加界面的联系人模型传递到联系人界面

    // 把联系人模型保存到数组
    [self.contacts addObject:contact];

    // 刷新表格
    [self.tableView reloadData];

}

// 点击注销的时候调用
- (IBAction)logout:(id)sender {

    // 弹出actionSheet
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"是否注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"注销" otherButtonTitles:nil, nil];

    [sheet showInView:self.view];

}
#pragma mark - UIActionSheetDelegate
// 点击UIActionSheet控件上的按钮调用
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0) { // 点击了注销

        [self.navigationController popViewControllerAnimated:YES];

    }

}

- (void)viewDidLoad {
    [super viewDidLoad];

//    // 取消分割线
//    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    // tableView有数据的时候才需要分割线

    // 开发小技巧:快速取消分割线
    self.tableView.tableFooterView = [[UIView alloc] init];

}

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.contacts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // 创建标示符
    static NSString *ID = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
    }

    // 获取模型
    XMGContact *c = self.contacts[indexPath.row];

    cell.textLabel.text = c.name;
    cell.detailTextLabel.text = c.phone;

    return cell;
}

#pragma mark - tableView代理方法
// 点击cell的时候调用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 加载storyboard
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    // 创建编辑控制器
     XMGEditViewController *editVc = [storyboard instantiateViewControllerWithIdentifier:@"edit"];

    editVc.contact = self.contacts[indexPath.row];
    editVc.block = ^(){ // 刷新表格
        [self.tableView reloadData];
    };

    // 跳转到编辑界面
    [self.navigationController pushViewController:editVc animated:YES];

}
@end
时间: 2024-12-28 23:12:16

03通讯录(搭建编辑界面)的相关文章

notepad++如何更改编辑界面前背景颜色?

notepad++是一款功能强大的文本编辑器,对于打开各种文本来说都非常的方便,但notepad++默认的背景颜色是纯白的,如果长时间盯着看确实不太舒服.其实,我们可以手动更改notepad++编辑界面的前背景色,达到我们舒服的视觉效果. 方法/步骤 首先说下,前景背景是这么定义的,如图 若要更改默认的前背景颜色,更改的地方在[设置]-[语言格式设置...] 左边选项卡依次要选[Global Styles]-[Default Style],在右边可以发现默认的颜色设置,即前景为黑,背景为白 若要

centos编辑界面和图形界面登陆切换设置

输入命令 vi /etc/inittab 到最后一行,把5改成3 保存退出. 各数字的含义: #   0 - halt (Do NOT set initdefault to this)          停止(不设initdefault这个) #   1 - Single user mode              单用户模式 #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)       

Xamarin iOS教程之编辑界面编写代码

Xamarin iOS教程之编辑界面编写代码 Xamarin iOS的Interface Builder Interface Builder被称为编辑界面. 它是一个虚拟的图形化设计工具,用来为iOS应用程序创建图形界面. 单击MainStoryboard.storyboard文件,就能够打开编辑界面了. 在Xamarin Studio 5.2.1后,编辑界面直接使用的是Storyboard故事面板,曾经则使用的是XIB(对于XIB的使用会在后面的章节中解说).大学霸它们之间最大的不同在于Sto

iOS 9应用开发教程之编辑界面与编写代码

iOS 9应用开发教程之编辑界面与编写代码 编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main.storyboard文件就打开了编辑界面.在Xcode 5.0以后中,编辑界面直接使用的是故事板.本小节将对编辑界面进行介绍 1.界面的构成 单击Main.storyboard打开编辑界面后,可以看到编辑界面会有4部分组成,如图1.23所示. 编号为1的部分为dock. 编号为2的部分为画布:用于设计用户界面的地方,在画布中

.NET快速信息化系统开发框架 V3.2-&gt;Web版本“产品管理”事例编辑界面新增KindEditor复文本编辑控件

KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器.KindEditor使用JavaScript编写,可以无缝的于Java..NET.PHP.ASP等程序接合.KindEditor非常适合在CMS.商城.论坛.博客.Wiki.电子邮件等互联网应用上使用,2006年7月首次发布2.0以来,KindEditor依靠出色的用户体验和领先的技术不断扩大编辑器市场占有率,目前在国内

编辑界面所示

标题.标签.正文内容,点击文章.视频发布编辑栏右上方“装扮文章(视频)”后面的“选择模板”或者“输入自定义代码”链接,进入模板选择区域或自定义代码美化区域,选择模板或自定义代码,进行个性化美化.如图一文章美化编辑界面.图二视频美化编辑界面所示.标题.标签.正文内容,点击文章.视频发布编辑栏右上方“装扮文章(视频)”后面的“选择模板”或者“输入自定义代码”链接,进入模板选择区域或自定义代码美化区域,选择模板或自定义代码,进行个性化美化.如图一文章美化编辑界面.图二视频美化编辑界面所示. http:

通用系列 —— 快速搭建设置界面

[关键词] 设置界面 通用系列 [问题] · 减少重复性代码,快速搭建设置界面(通过简单的配置,就可以达到想要的布局): [效果图] [分析] · 设置界面大同小异,无非由标题,内容,图标等元素组成: · 既然每一个设置项都有Title,那么就用Title的strId来作为它的唯一标识(便于点击等处理): · 复杂的地方在分割线的处理方式上(是整行显示,还是不要显示,又或者是在图像后面显示): · 继承自LinearLayout,要可以添加分割线,可以添加tips提示: [解决方案] 参考下方「

在【已转出档案】设计项列(用的实体为a)表界面上有一个转出详情按钮,点击转出详情按钮时调出【档案转出记录】设计项的编辑界面(用的实体为b),筛选条件为DangAnID=ID的代码如下

function(button, e) { debugger; // 中断调试指令,可以手动删除它 var me = this; // this 为列表视图控制器 var viewModel = this.getViewModel(); // 获取视图模型 var grid = this.getView(); // 获取到列表视图 var records = grid.getSelectionModel().getSelection(); // 获取到选中的记录数组 var record=rec

IOS开发--iPad之QQ空间 :(一)搭建登录界面

登录界面效果图: 相关的图片资源下载百度云备份链接: http://pan.baidu.com/s/1o71cvMU 密码: 2h7e 步骤开始: 设置辅助窗口的位置在下方 快捷键option,然后拖拽复制之后: 这里就直接省去了将背景颜色改为经典黑了. 到这里QQ空间的登录界面搭建完毕.