上周写了篇 <Plist文件加载控制器二(设置界面怎么写)> 赶上周末没有写完这周补全,下周再来一个升级版 可以交互的 Plist文件加载
废话不多说先上代码
#import "ViewController.h"
#import "TableViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
// 点击跳转之前需要设置plistName(第一次显示的plist中的内容)
- (IBAction)pushTableVC:(id)sender {
TableViewController *tabVC = [[TableViewController alloc]init];
tabVC.plistName = @"SetingV_C.plist";
[self.navigationController pushViewController:tabVC animated:YES];
}
这里对应的就是plist文件的格式 以及其中的内容
#import "TableViewController.h"
@interface TableViewController ()
@property (nonatomic,strong)NSArray *arr;
@end
@implementation TableViewController
// 已创建这个tableVIewController 就让他呈现分组样式
- (instancetype)init {
return [super initWithStyle:UITableViewStyleGrouped];
}
- (instancetype)initWithStyle:(UITableViewStyle)style {
return [super initWithStyle:UITableViewStyleGrouped];
}
// 懒加载plist文件中的内容
- (NSArray *)arr {
if (_arr == nil) {
NSString *path = [[NSBundle mainBundle] pathForResource:self.plistName ofType:nil];
_arr = [NSArray arrayWithContentsOfFile:path];
}
return _arr;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark - 下面数据源方法 不仔细介绍了 (图方便没有自定义cell)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.arr.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSDictionary *dict = self.arr[section];
NSArray *array = dict[@"items"];
NSLog(@"array.count : %lu",array.count);
return array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ID = @"cell";
NSDictionary *dic = self.arr[indexPath.section];
NSArray *array = dic[@"items"];
NSDictionary *dict = array[indexPath.row];
NSLog(@"about dict : %@",dict);
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
cell.backgroundColor = [UIColor darkGrayColor];
cell.textLabel.text = dict[@"cell_text"];
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:dict[@"accview_img"]]];
return cell;
}
// 上面的 步骤都一般 正常的数据源方法基本就这样 这里选择cell 就是主要研究的对象
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary *group = self.arr[indexPath.section];
NSDictionary *item = [group[@"items"] objectAtIndex:indexPath.row];
// 以上两步主要是为了解析 plist文件中的内容 target_vc 对应的就是相应的控制器(这里的这个tableVIewController 类似条件可以重复使用 切换plistName 就OK)
NSString *TargetClassName = item[@"target_vc"];
if (TargetClassName) {
//NSClassFromString : NSString转换成一个Class
Class TargetClass = NSClassFromString(TargetClassName);
UIViewController *destVC = [[TargetClass alloc]init];
if ([destVC isKindOfClass:[TableViewController class]]) {
TableViewController *setingVC = (TableViewController *)destVC;
setingVC.plistName = item[@"plistName"];
}
[self.navigationController pushViewController:destVC animated:YES];
}
}
@end
效果如下
不止可以设置cell中的内容还可以设置 header 和 footer 中的内容
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
NSDictionary *dict = self.arr[section];
// 返回footer 的文字
return dict[@"footer"];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
// 1.1 获取组信息
NSDictionary *dict = self.arr[section];
// 返回header的文字
return dict[@"header"];
}
效果如下:提醒二
关于:
这里有点问题,显示的时候图片遮住了cell一点点,后来我设置了header的高度 解决了,但是其他的header的高度就 ........ , 暂时没解决 待定~~ 如果有知道的朋友希望帮忙解决一下
项目结构如下
这里除了tableViewController 暂时添加的 一个控制器就是关于这个 界面 其中的代码是这样的
以后我们需要修改或者添加控制器,直接在plist文件中直接修改就OK,如果有重用的直接添加对应的plist文件就OK
这里target_vc 就是复用的 TableViewController 改变plistName 就修改了 控制器中的内容 ( 提醒二 这个cell 跳转的就是 复用 )
这个还不是终极版本,终极版本还可以带一些设置功能比如说,提醒 设置时间 ....... 这个还需要等到下周,今天又玩的有点晚(白天睡懒觉,晚上看了个电影<天启>场面还不错) 这里 <PushSeting3.plist> 这个plist文件中还一点没写,自定义cell 也没写 下周来个完整版,代码也会上传,大家见谅 😂😂😂😂 ,