IOS工作笔记(六)

说明:记录下学习IOS的一些琐碎,有些在现在看起来很简单幼稚,不过权当学习足迹吧!

1.NSArray中使用firstObject和lastObject的好处在于,当数组为空时,返回nil,而不会报错。

当数组为空,使用myArray[0]时,会报错。

 

2.UILabel和UIImageView都可以添加点击事件,以UIlabel为例。

1 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickSpecialWith)];
2 //必须设置userInteractionEnabled为yes,否则无效
3 myLabel.userInteractionEnabled = YES;
4 [myLabel addGestureRecognizer:tapGesture];

 

3.在普通的view中,一些方法可以加载initWithFrame中,如:

1 -(id)initWithFrame:(CGRect)frame{
2     self = [super initWithFrame:frame];
3     if (self) {
4         //添加选择器
5         [self setupChoiceView];
6     }
7     return self;
8 }

但在tableViewCell中,这些方法最好写在initWithStyle中,方便复用。如

1 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
2 {
3     if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
4         //自定义方法
5         [self setupFTEHitorySwitchBtn];
6     }
7     return self;
8 }

 

4.view的模态显示,效果类似于jsp的alert弹窗,如点击A类按钮,弹出B类的界面,则可以在

A类的点击方法中写:

1 UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:BController];
2 //设置弹窗的模式
3 navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
4 [self presentViewController:navigationController animated:YES completion:nil];

然后在弹窗页面想返回A类,那么需要在B类中添加返回方法,

 1 // 设置返回按钮
 2 -(void)setupReturnBackBtn{
 3     UIBarButtonItem *backBarBtn = [[UIBarButtonItem alloc]initWithTitle:@"Return" style:UIBarButtonItemStyleDone target:self action:@selector(backToPrevious)];
 4     [backBarBtn setTintColor:[UIColor whiteColor]];
 5     //定义barItem的左边的bar
 6     self.navigationItem.leftBarButtonItem = backBarBtn;
 7 }
 8 
 9 //返回上一页
10 -(void)backToPrevious{
11     [self dismissViewControllerAnimated:YES completion:nil];
12     //这里不能用[self popToRootViewControllerAnimated:YES]
13 }

 

5.UITableView的刷新,分为局部刷新和全部刷新。

1 //刷新tableView的所有cell
2 [self.tableView reloadData]; 
3 
4 //刷新单个cell,如下边的就是刷新第1个section的第1个cell
5 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
6 [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

此时需要注意的是,下标不能越界。

 

6.respondsToSelector用来判断对象是否有某个方法,这是被封装在selector对象里传递,一般用在代理中。

如在cell中,点击按钮通过push方法跳往另一个controller,则只能通过代理,因为在cell里边没有push这个方法。
在cell的.h中

1 @protocol MSFouthScatterDelegate <NSObject>
2 -(void)showFouthScatterView;
3 @end
4 
5 @interface MSFouthScatterCell : UITableViewCell
6 
7 @property(nonatomic,weak) id<MSFouthScatterDelegate> delegate;
8 
9 @end

在cell的.m中,

[btn addTarget:self action:@selector(clickScatterBtn) forControlEvents:UIControlEventTouchUpInside];

//需要注意的是,这两个地方的方法名必须相同,否则报错。

技术分享

-(void)clickScatterBtn{
    if ([self.delegate respondsToSelector:@selector(showFouthScatterView)]) {
        [self.delegate showFouthScatterView];
    }
}

在controller的.m中

 1 @interface MSSalesFourthController ()<MSFouthScatterDelegate>
 2 
 3 @end
 4 @implementation MSSalesFourthController
 5 //跳往另一个controller
 6 - (void)showFouthScatterView{
 7     MSFouthScatterController *vc = [[MSFouthScatterController alloc] init];
 8     [self.navigationController pushViewController:vc animated:YES];
 9 }
10 @end

这样即可。

 

7.做登录界面时,遇到一个问题。往UIImageView添加输入用户名和密码的UITextField时,textField不会响应点击,即不会弹出键盘。

此时只要设置imageView的userInteractionEnabled = YES 即可。
原先处理时是这样做

imageView.userInteractionEnabled = NO;
userName.userInteractionEnabled = YES;
userName.enabled = YES;
password.userInteractionEnabled = YES
password.enabled = YES;

但没有效果,其实只需要一行代码就够,其余可删除。

imageView.userInteractionEnabled = YES;

 

8.tableView如何不显示空白cell?如下,不想让下边空白的显示

技术分享

只需一行代码

self.tableView.tableFooterView = [[UIView alloc]init];

结果如下:

技术分享

当然,也可以用麻烦点的方法。在controller中

1 -(void)viewDidLoad{
2     [super viewDidLoad];
3 
4     self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
5 }

然后在自定义的cell中手动添加虚线。

 1 - (void)layoutSubviews
 2 {
 3     [super layoutSubviews];
 4     
 5     // 手动添加线
 6     UIView *view = [[UIView alloc] init];
 7     view.frame = CGRectMake(10, self.height -1, self.width - 20, 1);
 8     view.backgroundColor = [UIColor lightGrayColor];
 9     [self.contentView addSubview:view];
10 }

 

9.怎么改变uitextfield placeholder的颜色和位置?

1 - (void) drawPlaceholderInRect:(CGRect)rect {
2     [[UIColor blueColor] setFill];
3     [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
4 }

 

10.button的textLabel默认情况下是填充整个button的,这个可以由下面确定

myBtn.backgroundColor = [UIColor cyanColor]; 
myBtn.textLabel.backgroundColor = [UIColor redColor];

可以发现整个button会变成红色。
当button的背景图片看起来有些小时,若想使文字放到背景图片内,就可以使用内边距了。
相当于减少textLabel的大小。默认情况下textLabel的内边距就是(0,0,0,0).设置内边距可以用:

myBtn.contentEdgeInsets = UIEdgeInsetsMake(20,20,20,20);

效果就是textLabel分别距button的上下左右都是20point。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。