iOS 8:帮妹子调试第三方库 - RATreeView

关键字:RATreeView  妹子

周日晚上遇到一妹子用RATreeView(GitHub链接),想改变二级Cell高度。这库我也没接触过,但是,对方是妹子,明天还要交差,那就硬着头皮看代码吧。没想到此库结构非常清晰,真是业界良心。现在老了,很多事做完就忘,当是日志写写。下面记录下查找问题的过程。

1、先运行demo。如果跑不起来,那真是坑爹了。不过,免费的东西,也别要求太多,有代码就挺厚道的,毕竟提供了参考。demo被妹子改过,还好功能较单一。

2、看AppDelegate,找rootViewController。

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 4   if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
 5       self.viewController = [[RAViewController alloc] initWithNibName:@"RAViewController_iPhone" bundle:nil];
 6   } else {
 7       self.viewController = [[RAViewController alloc] initWithNibName:@"RAViewController_iPad" bundle:nil];
 8   }
 9   self.window.rootViewController = self.viewController;
10     [self.window makeKeyAndVisible];
11     return YES;
12 }

从代码可知,RAViewController为根控制器。

3、找RAViewController的viewDidLoad、viewWillAppear等生命周期方法。在viewDidLoad中找到如下代码:

 1   RATreeView *treeView = [[RATreeView alloc] initWithFrame:self.view.frame];
 2   
 3   treeView.delegate = self;
 4   treeView.dataSource = self;
 5   treeView.separatorStyle = RATreeViewCellSeparatorStyleSingleLine;
 6   
 7   [treeView reloadData];
 8   [treeView expandRowForItem:phone withRowAnimation:RATreeViewRowAnimationNone]; //expands Row
 9   [treeView setBackgroundColor:[UIColor redColor]];
10   
11   self.treeView = treeView;

RAViewController只覆盖了viewDidLoad,可知,应用呈现出来的视图即是11行self.treeView = treeView的操作结果。

4、受经验影响,查找heightFor方法,找到treeView:heightForRowForItem:treeNodeInfo:返回值为CGFloat,那基本是它在控制高度了。

 1 #pragma mark TreeView Delegate methods
 2 - (CGFloat)treeView:(RATreeView *)treeView heightForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo
 3 {
 4     if (treeNodeInfo.treeDepthLevel == 0) {
 5         return 100;
 6     }if (treeNodeInfo.treeDepthLevel == 1 && treeNodeInfo.siblingsNumber == 0) {
 7         return 20;
 8     }
 9     return 47;
10 }

妹子想控制二级Cell高度,那第6行代码if (treeNodeInfo.treeDepthLevel == 1 && treeNodeInfo.siblingsNumber == 0)应该是判断二级cell,果断改之,新代码如下:

 1 #pragma mark TreeView Delegate methods
 2 - (CGFloat)treeView:(RATreeView *)treeView heightForRowForItem:(id)item treeNodeInfo:(RATreeNodeInfo *)treeNodeInfo
 3 {
 4     if (treeNodeInfo.treeDepthLevel == 0) {
 5         return 100;
 6     }if (treeNodeInfo.treeDepthLevel == 1/*&&treeNodeInfo.siblingsNumber == 0*/) {
 7         if ([item isKindOfClass:[RADataObject class]]){
 8             RADataObject *dataObject = (RADataObject*)item;
 9             if ([dataObject.name isEqualToString:@"Phone 1"]) {
10                 return 150;
11             }
12         }
13         return 20;
14     }
15     return 47;
16 }

示例代码,硬编码,懒得搞,运行后妹子一看,得,就这个味。好,继续看《国土安全》。

总结:有毛线总结。

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