zoukankan      html  css  js  c++  java
  • iOS 开发中使用到的小技巧汇总

    国庆即将来到,一个小项目也即将完成,把自己在项目中用的一些小技巧写出来,方便查找。

    1,去掉分割线--动画设置透明度alpha
    //去掉tableView的分隔线:
        self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
        self.tableView.showsVerticalScrollIndicator=NO;
     
    2. 解决cell分割线左边短20px的问题
    -(void)viewDidLayoutSubviews{
        if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
            [self.tableView setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];
        }
     
        if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
            [self.tableView setLayoutMargins:UIEdgeInsetsMake(0,0,0,0)];
        }
    }
     
    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
        if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
            [cell setSeparatorInset:UIEdgeInsetsZero];
        }
     
        if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
            [cell setLayoutMargins:UIEdgeInsetsZero];
        }
    }
     

    typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
        UITableViewCellStyleDefault,    // 左侧显示textLabel(不显示detailTextLabel),imageView可选(显示在最左边)
        UITableViewCellStyleValue1,        // 左侧显示textLabel、右侧显示detailTextLabel(默认蓝色),imageView可选(显示在最左边)
        UITableViewCellStyleValue2,        // 左侧依次显示textLabel(默认蓝色)和detailTextLabel,imageView可选(显示在最左边)
        UITableViewCellStyleSubtitle    // 左上方显示textLabel,左下方显示detailTextLabel(默认灰色),imageView可选(显示在最左边)
    };
     
     

    //取消选中效果
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
       
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
       
    }

     2,更改Xcode的缺省公司名
    在终端输入
    defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{"ORGANIZATIONNAME" = "COMPANY";}'  
     
    3,如何使屏幕一直保持唤醒状态?(就是不自动黑屏)
    比如,如果我们做一个播放视频的功能时,想在播放的时候,不会自动进入屏保(黑屏)
    只要在代码里加入这一行:
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
     

     
    4,在Xcode中,文件名后小方框中的A(M或C)表示什么意思啊?

     表示在版本控制中,自上一次提交以来,文件做了修改。貌似只有在带有版本控制的项目代码中才会显示,也就是说你的项目使用了SVN、Git等工具后,会在Xcode中识别出来。

     
    'A'  新增

    'D'  删除

    'M'  修改

    'R'  替代

    'C'  冲突

    'I'  忽略

    '?'  未受控
    '!'  丢失,一般是将受控文件直接删除导致
     

    5,如何隐藏UINavigationBar

    有的时候,我们的视图使用了Navigation Controller ,但是主界面(rootviewcontroller)或其它push进入的界面 想使用一个全屏的view,就是说,不显示顶部的navigationBar,这个时候,就需要我们来隐藏了。

    //隐藏NavigationBar

     
    -(void) viewWillAppear:(BOOL)animated{
        [self.navigationControllersetNavigationBarHidden:YESanimated:YES]; //设置隐藏

        [super viewWillAppear:animated];

    }

    -(void) viewWillDisappear:(BOOL)animated{

      [self.navigationControllersetNavigationBarHidden:NOanimated:YES];
        [super viewWillDisappear:animated];
    }
     

    6,怎么保存选中的按钮,下一次点击取消上一次点击的按钮:
    //当前选中的按钮
    @property (nonatomic, weak) UIButton *selecteButton;
    - (void)btnClick:(UIButton *)button
    {
        _selecteButton.selected = NO;
        button.selected = YES;
        _selecteButton = button;
    }

    7,获取当前屏幕的点数
       //当前屏幕的比例  如果视网膜 = 2,如果是非视网膜= 1 6Plus为3
        CGFloat scale = [UIScreen mainScreen].scale;
    //切割一张图片  bigImage.CGImage要切割的图片,clipRect要切割的大小
    CGImageRef smallImage = CGImageCreateWithImageInRect(bigImage.CGImage, clipRect);
     

    8.某些情况下,如果控制器的view是从xib加载的,并且是600*600,当在控制器上再加一个控制器的view的时候,图片会缩放,可能会因为缩放太严重而导致没有显示出来,需要把autoresizingMask(缩放)清掉.
      

    9.父子控制器的重要性
    如果控制器1不是控制器2的子控制器,那么2的事件就传不到1里了,dismiss的时候也是回不去的。
     

    10,设置选中图片和文本的高亮状态
     // 设置普通图片
            cell.imageView.image = [UIImage imageNamed:c.icon];
            // 设置高亮图片(cell选中 -> cell.imageView.highlighted = YES -> cell.imageView显示highlightedImage这个图片)
            cell.imageView.highlightedImage = [UIImage imageNamed:c.highlighted_icon];
           
            // 设置label高亮时的文字颜色
            cell.textLabel.highlightedTextColor = [UIColor redColor];
     

    11.修改 UITableview 滚动条颜色的方法
     
    UITableview 的滚动条默认颜色是黑色的,如果 UItableview 背景也是深颜色,则滚动条会变的很不明显。您可以用下面这行代码来改变滚动条的颜色
    self.tableView.indicatorStyle=UIScrollViewIndicatorStyleWhite; 当然,最后的 “White” 也可以换成其它颜色。
     

     12.打印设置
    (在PCH文件中设置)
    //调试的打印发布之后自动取消
    #ifdef DUBUG
    #define LGFLog(...) NSLog(__VA_ARGS__)
    #else
    #define LGFLog(...)
    #endif

    #ifdef DEBUG
    #define LGFLog(s,...) NSLog( @"[%@ 行数 %d ] =====>%@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
    #else
    #define LGFLog(s,...)
    #endif

    //定义一个打印函数的输出
    #define LGFLogFunc LGFLog(@"%s",__func__)

    怎么设置所有的控制器的切换返回键都是同一格式的返回
    在自定义的navigationController里设置
    /**
     * 可以在这个方法中拦截所有push进来的控制器
     */
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        if (self.childViewControllers.count > 0) { // 如果push进来的不是第一个控制器
            UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
            [button setTitle:@"返回" forState:UIControlStateNormal];
            [button setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
            [button setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
            button.size = CGSizeMake(70, 30);
            // 让按钮内部的所有内容左对齐
            button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    //        [button sizeToFit];
            // 让按钮的内容往左边偏移10
            button.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
            [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
            [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
            viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
            // 隐藏tabbar
            viewController.hidesBottomBarWhenPushed = YES;
        }
       
        // 这句super的push要放在后面, 让viewController可以覆盖上面设置的leftBarButtonItem
        [super pushViewController:viewController animated:animated];
       
    }

    - (void)back
    {
        [self popViewControllerAnimated:YES];
    }
     

    MRC与ARC的转换

    字符串的清空设置

    TableView默认选中首行
        [self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];
     

    修改项目的名称
     

    开启显示隐藏文件
     
    • 显示     defaults write com.apple.finder AppleShowAllFiles -bool true
    • 隐藏   defaults write com.apple.finder AppleShowAllFiles -bool false
         killall Finder
     
     
     方法一:在Dock 图标上操作

      按住 Option 键并右键点按 Finder 图标,选择菜单中的“重新开启”

     
      方法二:在终端里操作
     
      打开终端(应用程序 – 实用工具),然后输入以下命令并回车
      killall Finder
      执行重新开启命令后,Finder 会退出并重新启动,整个桌面也会随之更新。有时遇到的小麻烦通过重启 Finder 就能解决,不一定要重启系统。
      Finder 和 Mac OS X 里的其它应用一样只是一个运行着的进程,因此你可以像退出其它应用一样退出 Finder,将其完全关闭。关闭 Finder 后桌面就没有图标了,也不能通过 Finder 窗口浏览文件了
     

    去除TabBarItem的渲染效果(swift)
    //设置选中的图片并且去除选中渲染效果
        controller.tabBarItem.selectedImage = UIImage(named:selectImagePath)?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
     

     
     
    //隐藏阴影线
        [[UITabBar appearance] setShadowImage:[UIImage new]];
    - (void)setupTabBarBackgroundImage {
        UIImage *image = [UIImage imageNamed:@"tab_bg"];
     
        CGFloat top = 40; // 顶端盖高度
        CGFloat bottom = 40 ; // 底端盖高度
        CGFloat left = 100; // 左端盖宽度
        CGFloat right = 100; // 右端盖宽度
        UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
        // 指定为拉伸模式,伸缩后重新赋值
        UIImage *TabBgImage = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];
        self.tabBar.backgroundImage = TabBgImage;
     
        [[UITabBar appearance] setShadowImage:[UIImage new]];
        [[UITabBar appearance] setBackgroundImage:[[UIImage alloc]init]];
    }
     
    //自定义TabBar高度
    - (void)viewWillLayoutSubviews {
     
        CGRect tabFrame = self.tabBar.frame;
        tabFrame.size.height = 60;
        tabFrame.origin.y = self.view.frame.size.height - 60;
        self.tabBar.frame = tabFrame;
    }

    //向上拖动 导航栏隐藏 ,向下就显示导航栏
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
       
    //    NSLog(@"offset---scroll:%f",self.tableView.contentOffset.y);
       
        //scrollView已经有拖拽手势,直接拿到scrollView的拖拽手势
        UIPanGestureRecognizer* pan = scrollView.panGestureRecognizer;
        //获取到拖拽的速度 >0 向下拖动 <0 向上拖动
        CGFloat velocity = [pan velocityInView:scrollView].y;
       
        if (velocity<-5) {
            //向上拖动,隐藏导航栏
            [self.navigationController setNavigationBarHidden:true animated:true];
        }
        else if (velocity>5) {
            //向下拖动,显示导航栏
            [self.navigationController setNavigationBarHidden:false animated:true];
        }
        else if(velocity==0){
           
            //停止拖拽
        }
    }
     

      /// 设置皮肤
        private func setupAppearance() {
            let naviBar = UINavigationBar.appearance()
            naviBar.tintColor = UIColor.orangeColor()
        }
     

    swift 中两个枚举是用数组,OC的是 枚举1|枚举2的形式。
     

    打印输出%
      
    NSInteger count = 50;
    //%是一个特殊符号 如果在NSString中用到%需要如下写法
    NSString *string = [NSString stringWithFormat:@"%zd%%",count];
    //输出结果是: 50%
    NSLog(@"%@", string);
     

    退出键盘
    1.UIView中
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        [self.view endEditing:YES];
    }
        //增加tap手势,点击使退出键盘
        UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissKeyBoard)];
        [self.tableView addGestureRecognizer:tapGesture];
       
    //隐藏键盘
    -(void)dismissKeyBoard{
        [self.tableView endEditing:YES];
    }
     
    问题来了,因为我自定义了UITableViewCell,里面会有一些按钮之类的控件,如果点到这些控件上时,键盘并不会退出。
    查了下资料,把tap手势的cancelsTouchesInView设置为NO:
    tapGesture.cancelsTouchesInView =NO;

    待续。。。。。。
  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/somethingWithiOS/p/5916318.html
Copyright © 2011-2022 走看看