zoukankan      html  css  js  c++  java
  • tableview前端基础设计(初级版)

    tableView前端基础设计

          实现的最终效果

      操作目的:熟悉纯代码编辑TableView和常用的相关控件SearchBar、NavigationBar、TabBar等,以及布局和基本功能的实现。

    一、TabBar编辑

      TabBar(标签栏)为实现多视图呈现的控制器,因为控制视图呈现,所以要在app完成之前进行设置。学习链接

     1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     2     // Override point for customization after application launch.
     3     
     4     //创建window
     5     self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     6     self.window.backgroundColor=[UIColor clearColor];
     7     
     8     //初始化一个tabBar
     9     self.tb=[[UITabBarController alloc] init];
    10     
    11     //设置为window的根控制器
    12     self.window.rootViewController=self.tb;
    13     self.tb.tabBar.backgroundColor=[UIColor whiteColor];
    14     
    15     //设置状态栏的样式,控制不被navigationBar的颜色覆盖
    16     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:NO];
    17     
    18     //创建子控制器
    19     [self MainLoadView];
    20     [self.window makeKeyAndVisible];
    21     return YES;
    22 }
    23 
    24 -(void)MainLoadView{
    25     [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];
    26     
    27     TestViewController *c1=[[TestViewController alloc] init];
    28     UINavigationController *nb1=[[UINavigationController alloc]initWithRootViewController:c1];
    29     //wx.tabBarItem.title=@"message";
    30     //wx.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemContacts tag:1];
    31     c1.navigationItem.titleView=[self NavigationTitle:@"微信"];
    32     
    33     contectViewController *c2=[[contectViewController alloc] init];
    34     UINavigationController *nb2=[[UINavigationController alloc]initWithRootViewController:c2];
    35     c2.navigationItem.titleView=[self NavigationTitle:@"通讯录"];
    36     
    37     findViewController *c3=[[findViewController alloc] init];
    38     UINavigationController *nb3=[[UINavigationController alloc]initWithRootViewController:c3];
    39     c3.navigationItem.titleView=[self NavigationTitle:@"发现"];
    40     
    41     
    42     meViewController *c4=[[meViewController alloc] init];
    43     UINavigationController *nb4=[[UINavigationController alloc]initWithRootViewController:c4];
    44     c4.navigationItem.titleView=[self NavigationTitle:@""];
    45     
    46     self.tb.viewControllers=@[nb1,nb2,nb3,nb4];
    47     [self customTabBar];
    48     
    49 }
    50 
    51 
    52 -(UILabel *)NavigationTitle:(NSString *)TitleText{
    53     UILabel *title=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
    54     title.backgroundColor=[UIColor clearColor];
    55     title.textColor=[UIColor whiteColor];
    56     title.font=[UIFont boldSystemFontOfSize:20];
    57     title.textAlignment=UITextAlignmentCenter;
    58     title.text=TitleText;
    59     return title;
    60 }
    61 
    62 //加载自定义的TabBarItem
    63 -(void)customTabBar{
    64     UITabBar *tabBar=self.tb.tabBar;
    65     UITabBarItem *tabBarItem0 = [tabBar.items objectAtIndex:0];
    66     UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:1];
    67     UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:2];
    68     UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:3];
    69 
    70 
    71     tabBarItem0.image = [[UIImage imageNamed:@"wechat-close.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    72     tabBarItem0.selectedImage = [[UIImage imageNamed:@"wechat-open.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    73     tabBarItem0.title=@"微信";
    74     
    75     tabBarItem1.image = [[UIImage imageNamed:@"contact-close.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    76     tabBarItem1.selectedImage = [[UIImage imageNamed:@"contact-open.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    77     tabBarItem1.title=@"通讯录";
    78     
    79     tabBarItem2.image = [[UIImage imageNamed:@"find-close.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    80     tabBarItem2.selectedImage = [[UIImage imageNamed:@"find-open.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    81     tabBarItem2.title=@"发现";
    82     
    83     tabBarItem3.image = [[UIImage imageNamed:@"me-close.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    84     tabBarItem3.selectedImage = [[UIImage imageNamed:@"me-open.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    85     tabBarItem3.title=@"";
    86     
    87     [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
    88                                                        kUIColorFromRGB(0x7a7e83), NSForegroundColorAttributeName,
    89                                                        nil] forState:UIControlStateNormal];
    90     [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
    91                                                       kUIColorFromRGB(0x1aad19), NSForegroundColorAttributeName,
    92                                                        nil] forState:UIControlStateSelected];
    93 }

    二、搜索栏编辑

      在ios8.0之前搜索栏是由SearchBar和SearchDisplayController联合控制呈现的,在ios8.0之后是由SearchController单独控制呈现。为了学习了解两种控制方式的区别,我在微信和通讯录页面用了两种不同的控制方式。最终体验就是改版后的省事多了,实现效果没有多大差别。(本测试中由于数据源格式不同所以呈现有些许差别)学习链接

    改版前(关于SearchBar的部分代码,详情见demo)

     1 @interface contectViewController ()<UISearchBarDelegate,UISearchDisplayDelegate>
     2 @property (nonatomic,strong) UISearchBar *searchBar;
     3 @property (nonatomic,strong) UISearchDisplayController *display;
     4 @end
     5 
     6 @implementation contectViewController
     7 - (void)viewDidLoad {
     8     [self.searchBar setShowsScopeBar:NO];
     9     [self search];
    10 }
    11 
    12 -(void)search{
    13     self.searchBar=[[UISearchBar alloc] init];
    14     self.searchBar.placeholder=@"Search";
    15     self.tableView.tableHeaderView = self.searchBar;
    16     
    17     self.display=[[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
    18     
    19     self.searchBar.delegate=self;
    20     self.display.searchResultsDataSource=self;
    21     self.display.searchResultsDelegate=self;
    22     self.display.delegate=self;
    23 }
    24 
    25  //添加索引
    26 -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
    27  
    28      return self.titlearr;
    29  
    30  }
    31  
    32 -(NSInteger) tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
    33     NSInteger count=0;
    34     for(NSString *character in self.titlearr){
    35         if([[character uppercaseString] hasPrefix:title]){
    36             return count;
    37         }
    38         count++;
    39     }
    40     return 0;
    41 }
    42 
    43 -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(nullable NSString *)searchString{
    44 
    45     NSPredicate *resultPredicate=[NSPredicate predicateWithFormat:@"self contains[cd] %@",searchString];
    46     self.searcharr=[self.contect filteredArrayUsingPredicate:resultPredicate];
    47     return YES;
    48 }
    49 @end

    改版后(SearchBarController的相关代码)

     1 @interface TestViewController () 
     2 @property (nonatomic,strong) SearchResultViewController *mySRTVC;
     3 @property (nonatomic,strong) UISearchController *svc;
     4 
     5 @end
     6 
     7 @implementation TestViewController
     8 -(NSArray *)dataSource{
     9     if(!_dataSource){
    10         _dataSource=[User demoData];
    11     }
    12     return _dataSource;
    13 }
    14 - (void)viewDidLoad {
    15     self.mySRTVC=[[SearchResultViewController alloc] init];
    16     self.mySRTVC.mainSearchController = self;
    17     self.svc=[[UISearchController alloc] initWithSearchResultsController:self.mySRTVC];
    18     [self.svc.searchBar sizeToFit];
    19     self.tableView.tableHeaderView=self.svc.searchBar;
    20     
    21     //设置搜索控制器的结果更新代理对象
    22     self.svc.searchResultsUpdater=self;
    23     
    24 /*    //Scope:就是效果图中那个分类选择器
    25     self.svc.searchBar.scopeButtonTitles=@[@"设备",@"软件",@"其他"];
    26     //为了响应scope改变时候,对选中的scope进行处理 需要设置search代理
    27     self.svc.searchBar.delegate=self;
    28 */
    29     self.definesPresentationContext=YES;
    30 }
    31 
    32 #pragma mark - UISearchResultsUpdating
    33 
    34 /**实现更新代理*/
    35 -(void)updateSearchResultsForSearchController:(UISearchController *)searchController
    36 {
    37     //获取到用户输入的数据
    38     NSString *searchText=searchController.searchBar.text;
    39     NSMutableArray *searchResult=[[NSMutableArray alloc]init];
    40     for (User *u in self.dataSource) {
    41         NSRange range=[u.name rangeOfString:searchText];
    42         if(range.length> 0){
    43             [searchResult addObject:u];
    44         }
    45     }
    46     self.mySRTVC.searchResults=searchResult;
    47      
    48     /**通知结果ViewController进行更新*/
    49     [self.mySRTVC.tableView reloadData];
    50 }
    51 
    52 #pragma mark - UISearchBarDelegate
    53 /**点击按钮后,进行搜索页更新*/
    54 -(void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope
    55 {
    56     [self updateSearchResultsForSearchController:self.svc];
    57 }

     本版本的demo:GitHub链接

    用SourceTree上传Xcode的代码到GitHub请参考=>这里

  • 相关阅读:
    模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数 字,求和之后输出结果,写出其的设计思想、程序流程图、源程序代码。
    大道至简第二章读后感
    大道至简第一章读后感
    md5实现
    jdk-动态代理
    使用反射复制对象
    java-二分查找法
    java-base64
    cxf框架使用(一)
    Freemarket学习笔记(一)
  • 原文地址:https://www.cnblogs.com/lexyg/p/7264238.html
Copyright © 2011-2022 走看看