美文网首页
IOS分段控制器

IOS分段控制器

作者: _NSString | 来源:发表于2017-08-24 09:57 被阅读0次

    首先在AppDelegate.m中修改根视图
    AppDelegate.m中

    #import "AppDelegate.h"
    #import "ViewController.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        ViewController *vv = [[ViewController alloc]init];
        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vv];
        self.window.rootViewController = nav;
        return YES;
    }
    
    
    - (void)applicationWillResignActive:(UIApplication *)application {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }
    
    
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }
    
    
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }
    
    - (void)applicationWillTerminate:(UIApplication *)application {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    
    @end
    
    

    ViewController.m中

    #import "OneViewController.h"
    #import "TwoViewController.h"
    #import "ThreeViewController.h"
    #import "FourViewController.h"
    #import "FiveViewController.h"
    #import "SixViewController.h"
    #import "PopViewController.h"
    
    
    @interface ViewController ()<UIScrollViewDelegate,UIPopoverPresentationControllerDelegate>{
        
        NSMutableArray *arr;
        UIButton *btn;
    }
    @property (nonatomic, strong) UISegmentedControl *segmentedControl;
    @property (nonatomic, strong) UIScrollView *scrollView;
    @property (nonatomic, strong) OneViewController *oneVC;
    @property (nonatomic, strong) TwoViewController *twoVC;
    @property (nonatomic, strong) ThreeViewController *threeVC;
    @property (nonatomic, strong) FourViewController *fourVC;
    @property (nonatomic, strong) FiveViewController *fiveVC;
    @property (nonatomic, strong) SixViewController *sixVC;
    @property (nonatomic, strong) UIPopoverPresentationController *pop;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.title = @"先锋";
        self.view.backgroundColor = [UIColor whiteColor];
        
    //    创建一个view,放分段控制器
        UIView *vv = [[UIView alloc]initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, 30)];
    //    vv.backgroundColor = [UIColor redColor];
        [self.view addSubview:vv];
        
    //    存储分段控制器标题
        arr = [NSMutableArray arrayWithObjects:@"呵呵呵",@"啊啊啊",@"嘎嘎嘎",@"呃呃呃",@"滚滚滚",@"啦啦啦",nil];
        // 适应scrollView
        self.automaticallyAdjustsScrollViewInsets = NO;
    //    创建分段控制器
        self.segmentedControl = [[UISegmentedControl alloc]initWithItems:arr];
        self.segmentedControl.frame = CGRectMake(0, 0, 386, 30);
    //    加载到vv上
        [vv addSubview:self.segmentedControl];
    //    self.navigationItem.titleView = self.segmentedControl;
        [self.segmentedControl addTarget:self action:@selector(segmentedControlAction:) forControlEvents:UIControlEventValueChanged];
    //    默认第一个视图
        self.segmentedControl.selectedSegmentIndex = 0;
        
        // 创建scrollView
        self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 94, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64)];
        [self.view addSubview:self.scrollView];
        // 设置scrollView的内容
        self.scrollView.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width * 6, [UIScreen mainScreen].bounds.size.height - 64);
        self.scrollView.pagingEnabled = YES;
        self.scrollView.bounces = YES;
        
        // 创建控制器
        self.oneVC = [OneViewController new];
        self.twoVC = [TwoViewController new];
        self.threeVC = [ThreeViewController new];
        self.fourVC = [FourViewController new];
        self.fiveVC = [FiveViewController new];
        self.sixVC = [SixViewController new];
    
        // 添加为self的子控制器
        [self addChildViewController:self.oneVC];
        [self addChildViewController:self.twoVC];
        [self addChildViewController:self.threeVC];
        [self addChildViewController:self.fourVC];
        [self addChildViewController:self.fiveVC];
        [self addChildViewController:self.sixVC];
        
        
    //    每个视图
        self.oneVC.view.frame = CGRectMake(0, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame));
        self.twoVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame));
        self.threeVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width*2, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame));
        self.fourVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width*3, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame));
        self.fiveVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width*4, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame));
        self.sixVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width*5, 0, self.scrollView.frame.size.width, CGRectGetHeight(self.scrollView.frame));
        
        
        //加载到滚动视图上
        [self.scrollView addSubview:self.oneVC.view];
        [self.scrollView addSubview:self.twoVC.view];
        [self.scrollView addSubview:self.fourVC.view];
        [self.scrollView addSubview:self.fiveVC.view];
        [self.scrollView addSubview:self.threeVC.view];
        [self.scrollView addSubview:self.sixVC.view];
        
        // 设置scrollView的代理
        self.scrollView.delegate = self;
        
    //    按钮
        btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        //按钮位置
        btn.frame = CGRectMake(385, 0, 30, 30);
    //    按钮背景颜色
        btn.backgroundColor = [UIColor whiteColor];
        [btn setTitle:@"+" forState:0];
        btn.layer.borderWidth = 1;
        btn.layer.borderColor = [UIColor blueColor].CGColor;
        
    
    //    按钮点击事件
        [btn addTarget:self action:@selector(btnclick) forControlEvents:UIControlEventTouchUpInside];
    //    加载
        [vv addSubview:btn];
        
        
      
        
    }
    
    //分段控制器方法
    - (void)segmentedControlAction:(UISegmentedControl *)sender
    {
        [self.scrollView setContentOffset:CGPointMake(sender.selectedSegmentIndex * self.scrollView.frame.size.width, 0) animated:YES];
    }
    //滚动视图代理方法
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        NSInteger n = scrollView.contentOffset.x / scrollView.frame.size.width;
        self.segmentedControl.selectedSegmentIndex = n;
    }
    
    //实现按钮方法
    -(void)btnclick{
        
        //初始化内容视图控制器
        PopViewController *popview = [[PopViewController alloc]init];
        //设置大小
        popview.preferredContentSize = CGSizeMake(150, 140);
        
        // 设置弹出效果
        popview.modalPresentationStyle = UIModalPresentationPopover;
        //初始化一个popover
        self.pop = popview.popoverPresentationController;
        self.pop.delegate = self;
        
        //设置弹出视图的颜色
        self.pop.backgroundColor = [UIColor whiteColor];
        //设置popover的来源按钮(以button谁为参照)
        self.pop.sourceView = btn;
        //设置弹出视图的位置(以button谁为参照)
        self.pop.sourceRect = btn.bounds;
        //箭头的方向 设置成UIPopoverArrowDirectionAny 会自动转换方向
        self.pop.permittedArrowDirections = UIPopoverArrowDirectionUp;
        //模态出弹框
        [self presentViewController:popview animated:YES completion:nil];
        
    }
    
    
    
    - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
        return UIModalPresentationNone;
    }
    
    //点击蒙版是否消失,默认为yes;
    
    -(BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
        return YES;
    }
    
    //弹框消失时调用的方法
    -(void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
        
        NSLog(@"弹框已经消失");
        
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    @end
    
    

    新建一个PopViewController 继承UIViewController
    PopViewController.m中

    
    #import "PopViewController.h"
    
    @interface PopViewController ()<UITableViewDelegate,UITableViewDataSource>{
        //数组
        UITableView *table;
    //    表格元素
        NSArray *imgarr,*name;
    }
    
    @end
    
    @implementation PopViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    //    self.view.backgroundColor = [UIColor greenColor];
    //    表格
        table = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
    //    代理
        table.delegate = self;
        table.dataSource = self;
    //    加载
        [self.view addSubview:table];
    //    数组内容
        imgarr = @[@"1",@"2",@"3"];
        name = @[@"确认添加",@"删除添加",@"关闭"];
    
    }
    //分区行数
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return imgarr.count;
    }
    //内容
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@""];
        if (!cell) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@""];
        }
        cell.imageView.image = [UIImage imageNamed:imgarr[indexPath.row]];
        cell.textLabel.text = name[indexPath.row];
        
        return cell;
    }
    //点击行相应事件
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //    判断第几行
        if (indexPath.row == 0) {
    //        提示框
            UIAlertController*alertController = [UIAlertController alertControllerWithTitle:@"确认添加"message:@"操作以完成" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
            [alertController addAction:action];
            [self presentViewController:alertController animated:YES completion:nil];
        }
        //如果等于第二行 
        else if (indexPath.row == 1){
            //        提示框
            UIAlertController*alertController = [UIAlertController alertControllerWithTitle:@"删除添加"message:@"操作以完成" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
            [alertController addAction:action];
            [self presentViewController:alertController animated:YES completion:nil];
        }
        else if (indexPath.row == 2){
            //        提示框
            UIAlertController*alertController = [UIAlertController alertControllerWithTitle:@"关闭"message:@"操作以完成" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
            [alertController addAction:action];
            [self presentViewController:alertController animated:YES completion:nil];
        }
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    /*
    #pragma mark - Navigation
    
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
    }
    */
    
    @end
    
    

    新建类继承UIViewController:
    OneViewController
    TwoViewController
    ThreeViewController
    FourViewController
    FiveViewController
    SixViewController
    设置背景颜色

    相关文章

      网友评论

          本文标题:IOS分段控制器

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