关于故事板XIB以及UITableView编辑

今天试了试Storyboard,感觉还是挺方便的,减少了大量代码量,算作是提高了效率吧。不过本人第一次用还不是很熟悉,对于autolayout也是第一次使用(之前是使用Masonry,还是很方便,详情见里脊串大神的Masonry使用),也是第一次使用xib,想想有点落伍了。不过本人的建议是初学者可以先从代码入手,之后转Storyboard很容易。

初始界面如下所示,为故事板构建,其中按钮使用autolayout,点击故事板文件,选择要适配的控件,然后点击故事板下方wAny hAny那行的右边小按钮(之所以这样描述是因为本渣渣一开始找半天没找到),有系统自动推荐的适配,也可以自己添加约束。在这里我按钮均为系统推荐的约束,然后下方有UINavigationBar,UITableView,UIToolBar。不得不说我一开始也是各种奇怪的控件跑来跑去,后面慢慢摸索出来自己的套路。我最常用的是Add Missing Constraints,用来进行控件与控件间的约束。添加完约束后可以在右边Show the Size inspector里面微调,在这里就不细说(因为本渣不擅长解说,想玩玩的可以去GitHub找源码研究,挺详细的)。

关于故事板XIB以及UITableView编辑_第1张图片

接下来是UITableView界面。点击右下角的按钮就能显示出来。这里是设计为播放列表显示,界面如下。这里我的UITableView放在屏幕下面,没有添加约束,因为一约束然后点击编辑就会缩下去。播放列表跟关闭两个控件都与UITableView添加了约束。UITableView采用了自定义cell,有机会专门写篇介绍自定义cell的代码实现与xib实现,或者大家去网上搜教程,本渣也是从网上学来的。粗略介绍下,首先建立一个空白文件,命名XX.xib,之后与故事板一样也是拖动控件进去,然后自己设计控件样式,然后点击File's Owner设置为要使用的controller,并设置自定义控件的identifier。附上一段使用代码:


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

//自定义控件的identifier

static NSString *simpleIdentify = @"SimpleIdentify";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleIdentify];

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTable" owner:self options:nil];

if ([nib count] > 0) {

self.customCell = [nib objectAtIndex:0];

cell = self.customCell;

}

//控件的tag值需设定

UILabel *nameLabel = (UILabel *)[cell.contentView viewWithTag:1];

nameLabel.text = _musicList[indexPath.row];

UIButton *clearBtn = (UIButton *)[cell.contentView viewWithTag:2];

clearBtn.tag = indexPath.row;

[clearBtn addTarget:self action:@selector(deleteOneAction:) forControlEvents:UIControlEventTouchUpInside];

return cell;

}


关于故事板XIB以及UITableView编辑_第2张图片

实现UITableView的编辑功能主要是实现几个方法:- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;设置是否允许编辑,返回YES表示可以编辑

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;设置编辑状态UITableViewCellEditingStyleNone,UITableViewCellEditingStyleDelete,UITableViewCellEditingStyleInsert三种状态。

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;完成编辑。附上代码:


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

// Return NO if you do not want the specified item to be editable.

return YES;

}

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

if (_myTableView.editing) {

return UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete;

}

else{

return UITableViewCellEditingStyleDelete;

}

}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

if (editingStyle == UITableViewCellEditingStyleDelete) {

[_musicList removeObjectAtIndex:indexPath.row];

//[_myTableView beginUpdates];

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

// [_myTableView endUpdates];

}

}

//确定删除选中的cell

- (IBAction)sureAction:(id)sender {

NSArray *arr = _myTableView.indexPathsForSelectedRows;

NSMutableIndexSet *set = [NSMutableIndexSet indexSet];

for (NSIndexPath *indexP in  arr) {

[set addIndex:indexP.row];

}

[_musicList removeObjectsAtIndexes:set];

[_myTableView deleteRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationAutomatic];

}



讲得可能不够详细,最后附上项目文件,后续再进行更新。有什么意见或者心得可以与我分享。新鸟还请大家见谅。项目下载

你可能感兴趣的:(关于故事板XIB以及UITableView编辑)