美文网首页IT那些事iOS一一问题集移动开发
Plist文件加载控制器二(设置界面怎么写)

Plist文件加载控制器二(设置界面怎么写)

作者: 记住你姓李 | 来源:发表于2016-06-05 23:23 被阅读171次

上周写了篇 <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文件的格式 以及其中的内容


E161EE38-BD49-4762-A2CC-7FCA3D075007.png
#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

效果如下


提醒一.gif

不止可以设置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"];
}

效果如下:提醒二


提醒二.gif

关于:


关于.gif

这里有点问题,显示的时候图片遮住了cell一点点,后来我设置了header的高度 解决了,但是其他的header的高度就 ........ , 暂时没解决 待定~~ 如果有知道的朋友希望帮忙解决一下


IMG_0151.PNG

项目结构如下


6A6B3A34-1B7A-4506-AD85-0D2A5D0D6883.png

这里除了tableViewController 暂时添加的 一个控制器就是关于这个 界面 其中的代码是这样的


90F9F4CB-FEC6-4DF5-8DC0-37611E6D0596.png

以后我们需要修改或者添加控制器,直接在plist文件中直接修改就OK,如果有重用的直接添加对应的plist文件就OK

这里target_vc 就是复用的 TableViewController 改变plistName 就修改了 控制器中的内容 ( 提醒二 这个cell 跳转的就是 复用 )


E5473E73-5A1B-4B62-B95F-6FBC82E433AC.png

这个还不是终极版本,终极版本还可以带一些设置功能比如说,提醒 设置时间 ....... 这个还需要等到下周,今天又玩的有点晚(白天睡懒觉,晚上看了个电影<天启>场面还不错) 这里 <PushSeting3.plist> 这个plist文件中还一点没写,自定义cell 也没写 下周来个完整版,代码也会上传,大家见谅 😂😂😂😂 ,

相关文章

网友评论

本文标题:Plist文件加载控制器二(设置界面怎么写)

本文链接:https://www.haomeiwen.com/subject/jxprdttx.html