ios基本控件详解(持续更新)

UIButton

//这里创建一个圆角矩形的按钮
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

//    能够定义的button类型有以下6种,
//    typedef enum {
//        UIButtonTypeCustom = 0,          自定义风格
//        UIButtonTypeRoundedRect,         圆角矩形 
//        UIButtonTypeDetailDisclosure,    蓝色小箭头按钮,主要做详细说明用
//        UIButtonTypeInfoLight,           亮色感叹号
//        UIButtonTypeInfoDark,            暗色感叹号
//        UIButtonTypeContactAdd,          十字加号按钮
//    } UIButtonType;

    //给定button在view上的位置
    button1.frame = CGRectMake(20, 20, 280, 20);

    //button背景色
    button1.backgroundColor = [UIColor clearColor];

    //设置button填充图片
    //[button1 setImage:[UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal];

    //设置button标题
    [button1 setTitle:@"点击" forState:UIControlStateNormal];

    /* forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现*/
    //以下是几种状态
//    enum {
//        UIControlStateNormal       = 0,         常规状态显现              
//        UIControlStateHighlighted  = 1 << 0,    高亮状态显现    
//        UIControlStateDisabled     = 1 << 1,    禁用的状态才会显现
//        UIControlStateSelected     = 1 << 2,    选中状态              
//        UIControlStateApplication  = 0x00FF0000, 当应用程序标志时            
//        UIControlStateReserved     = 0xFF000000  为内部框架预留,可以不管他             
//    };

    /*
     * 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no,
     * 那么可以去掉这个功能
    */
    button1.adjustsImageWhenHighlighted = NO;
    /*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/
    button1.adjustsImageWhenDisabled = NO;
    /* 下面的这个属性设置为yes的状态下,按钮按下会发光*/
    button1.showsTouchWhenHighlighted = YES;

    /* 给button添加事件,事件有很多种,我会单独开一篇博文介绍它们,下面这个时间的意思是
     按下按钮,并且手指离开屏幕的时候触发这个事件,跟web中的click事件一样。
     触发了这个事件以后,执行butClick:这个方法,addTarget:self 的意思是说,这个方法在本类中
     也可以传入其他类的指针*/
    [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];


    //显示控件
    [self.view addSubview:button1];

UILabel

//创建uilabel
        UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];     
        //设置背景色
        label1.backgroundColor = [UIColor grayColor];
        //设置tag
        label1.tag = 91;
        //设置标签文本
        label1.text = @"Hello world!";
        //设置标签文本字体和字体大小
        label1.font = [UIFont fontWithName:@"Arial" size:30];
        //设置文本对其方式
        label1.textAlignment = UITextAlignmentCenter;
        //文本对齐方式有以下三种
        //typedef enum {
        //    UITextAlignmentLeft = 0,左对齐
        //    UITextAlignmentCenter,居中对齐
        //    UITextAlignmentRight, 右对齐                  
        //} UITextAlignment;
        //文本颜色
        label1.textColor = [UIColor blueColor];
        //超出label边界文字的截取方式
        label1.lineBreakMode = UILineBreakModeTailTruncation;
        //截取方式有以下6种
        //typedef enum {
        //    UILineBreakModeWordWrap = 0,    以空格为边界,保留整个单词          
        //    UILineBreakModeCharacterWrap,   保留整个字符          
        //    UILineBreakModeClip,            到边界为止          
        //    UILineBreakModeHeadTruncation,  省略开始,以……代替        
        //    UILineBreakModeTailTruncation,  省略结尾,以……代替       
        //    UILineBreakModeMiddleTruncation,省略中间,以……代替,多行时作用于最后一行        
        //} UILineBreakMode;
        //文本文字自适应大小
        label1.adjustsFontSizeToFitWidth = YES;
        //当adjustsFontSizeToFitWidth=YES时候,如果文本font要缩小时
        //baselineAdjustment这个值控制文本的基线位置,只有文本行数为1是有效
        label1.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
        //有三种方式
        //typedef enum {
        //    UIBaselineAdjustmentAlignBaselines = 0, 默认值文本最上端于label中线对齐
        //    UIBaselineAdjustmentAlignCenters,//文本中线于label中线对齐
        //    UIBaselineAdjustmentNone,//文本最低端与label中线对齐
        //} UIBaselineAdjustment; 
        //文本最多行数,为0时没有最大行数限制
        label1.numberOfLines = 2;
        //最小字体,行数为1时有效,默认为0.0
        label1.minimumFontSize = 10.0;
        //文本高亮
        label1.highlighted = YES;
        //文本是否可变
        label1.enabled = YES;
        //去掉label背景色
        //label1.backgroundColor = [UIColor clearColor];
        //文本阴影颜色
        label1.shadowColor = [UIColor grayColor];
        //阴影大小
        label1.shadowOffset = CGSizeMake(1.0, 1.0);
        //是否能与用户交互
        label1.userInteractionEnabled = YES;
        [self.view addSubview:label1];
        [label1 release];

UITextVIew

- (void)UI{
   //UITextView(使用须遵守UITextViewDelegate协议)
    UITextView *textView = [UITextView new];
    //设置是否可以编辑
    textView.editable = YES;

    //设置代理
    textView.delegate = self;

    //设置内容
    textView.text = @"xxxxxxxxxx";

    //字体颜色
    textView.textColor = [UIColor cyanColor];

    //设置字体
    textView.font = [UIFont systemFontOfSize:30];

    //设置是否可以滚动
    //UITextView继承于UIScrollView
    textView.scrollEnabled = NO;

    //UITextView 下得键盘中return 表示换行
    [self.view addSubview:textView];

    //消除影响(iOS7 如果把UIscrollView 加在导航中一般内容会向下走64)
    self.automaticallyAdjustsScrollViewInsets = NO;
}
#pragma mark - UITextViewDelegate协议中的方法
//将要进入编辑模式
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{return YES;}
//已经进入编辑模式
- (void)textViewDidBeginEditing:(UITextView *)textView{}
//将要结束/退出编辑模式
- (BOOL)textViewShouldEndEditing:(UITextView *)textView{return YES;}
//已经结束/退出编辑模式
- (void)textViewDidEndEditing:(UITextView *)textView{}
//当textView的内容发生改变的时候调用
- (void)textViewDidChange:(UITextView *)textView{}
//选中textView 或者输入内容的时候调用
- (void)textViewDidChangeSelection:(UITextView *)textView{}
//从键盘上将要输入到textView 的时候调用
//rangge  光标的位置
//text  将要输入的内容
//返回YES 可以输入到textView中  NO不能
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{return YES;}

UINavigationController
1.设置导航栏标题

self.title = @"WolfHong";

2.设置导航栏样式

设置方法:

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];

UIBarStyle的样式:

typedef NS_ENUM(NSInteger, UIBarStyle) {
    UIBarStyleDefault          = 0,
    UIBarStyleBlack            = 1,

    UIBarStyleBlackOpaque      = 1, // Deprecated. Use UIBarStyleBlack
    UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES
};

UIBarStyleDefault是默认样式,UIBarStyleBlack是黑色不透明。UIBarStyleBlackOpaque和UIBarStyleBlackTranslucent这两个已经废弃了。

如果想设置导航栏透明,可以加上下面这句代码:

self.navigationController.navigationBar.translucent = YES;

3.修改返回按钮title

self.navigationItem.title = @"test";

4.隐藏返回按钮title

比较笨的方法是:

self.navigationItem.title = @”“;

还可以这样设置:

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];

5.设置leftBarButtonItem

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
- (void)back:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}

6.左滑返回手势失效了怎么办

如果按上一步设置leftBarButtonItem之后,左滑返回手势就会失效。设置一下UIGestureRecognizerDelegate代理即可:

self.navigationController.interactivePopGestureRecognizer.delegate = self;

















UISegmentedControl

 初始化UISegmentedControl

NSArray *arr = [[NSArray alloc]initWithObjects:@"轻拍",@"长按",@"清扫",@"旋转",@"捏合",@"拖拽", nil];

//先创建一个数组用于设置标题

 UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:arr];

//在没有设置[segment setApportionsSegmentWidthsByContent:YES]时,每个的宽度按segment的宽度平分

segment.frame = CGRectMake(0, 400, 320, 40);

//设置frame


管理Segment的内容

[segment setTitle:@"大便" forSegmentAtIndex:3]; 

//设置下标为3的segment的标题 下标以0开始 iOS里的所有下标都是以0开始

[segment setImage:[UIImage imageNamed:@"3"] forSegmentAtIndex:4];

//设置下标为4的segment的图片


管理Segments

[segment insertSegmentWithImage:[UIImage imageNamed:@"3"] atIndex:2 animated:YES]; //设置图片

[segment insertSegmentWithTitle:@"ddd" atIndex:0 animated:YES];//设置标题

[segment numberOfSegments];//得到segment的数量

[segment removeAllSegments];//移出所有segment

[segment removeSegmentAtIndex:2 animated:YES];//移出下标为2的segment

segment.selectedSegmentIndex = 0;//选中第几个segment 一般用于初始化时选中


管理Segment的行为和外观   

segment.momentary = NO;

//默认为NO 当设置为YES时,当被选中后,一会儿后不显示被选中状态(最左边的样子),不选中状态即下图的右边几个按钮一样

这里写图片描述

 segment.segmentedControlStyle = UISegmentedControlStyleBar;

typedef enum {
   UISegmentedControlStylePlain,
   UISegmentedControlStyleBordered,
   UISegmentedControlStyleBar,
   UISegmentedControlStyleBezeled,
} UISegmentedControlStyle;

//设置样式 当为Bordered和Bar时tintColor才有效 下图为tintcolor为红色时的样子

//Bar样式这里写图片描述
//Bordered这里写图片描述

 [segment setEnabled:NO]; //设置segment是否可用 此方法是其父类UIControl的方法

[segment setEnabled:NO forSegmentAtIndex:2];//设置下标为2的segment不可用

[segment setWidth:100 forSegmentAtIndex:2]; //这时下表为2的segment的宽度

[segment setContentOffset:CGSizeMake(10, 10) forSegmentAtIndex:2];//设置内容偏移

segment.apportionsSegmentWidthsByContent = YES; //是否根据segment的内容改变segment的宽度

自定义外观

[segment setTintColor:[UIColor redColor]]; //设置segments的颜色

[segment setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

typedef enum {
    UIBarMetricsDefault,  //竖屏
    UIBarMetricsLandscapePhone,  横屏
} UIBarMetrics;

//设置在某个状态下segments的背景图片

[segment setTitleTextAttributes:dic forState:UIControlStateNormal];


NSString *const UITextAttributeFont;                       value: UIFont
NSString *const UITextAttributeTextColor;                 value: UIColor
NSString *const UITextAttributeTextShadowColor;       value: UIColor
NSString *const UITextAttributeTextShadowOffset;      value: NSValue wrapping a UIOffset

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor,[UIFont fontWithName:@"SnellRoundhand-Bold" size:24],UITextAttributeFont ,nil];  

//设置标题的颜色 字体和大小 阴影和阴影颜色


[segment addTarget:self action:@selector(change:) forControlEvents:UIControlEventValueChanged];

//当选中不同的segment时,会执行change:方法





UISegmentedControl分段控件代替了桌面OS上的单选按钮。不过它的选项个数非常有限,因为你的IOS设备屏幕有限。当我们需要使用选项非常少的单选按钮时它很合适。

一、创建

UISegmentedControl*mySegmentedControl = [[UISegmentedControlalloc]initWithItems:nil];

是不是很奇怪没有指定位置和大小呢?没错,我确实在他的类声明里只找到 initWithItems 而未找到 initWithFrame ,所以他不需要指定,不过我看到了另一个方法,这个方法可以设置Item的宽度:

    mySegmentedControl setWidth:100 forSegmentAtIndex:0];//设置Item的宽度  



二、属性

    mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;//风格  

可以视使用的场合,有三种风格选择,如下:

    typedef enum {  
        UISegmentedControlStylePlain,     // large plain 有灰边的大白按钮,适合偏好设置单元   
        UISegmentedControlStyleBordered,  // large bordered 黑边的大白按钮,适用于表格单元   
        UISegmentedControlStyleBar,       // small button/nav bar style. tintable 小按钮,适合导航栏   
        UISegmentedControlStyleBezeled,   // large bezeled style. tintable   
    } UISegmentedControlStyle;  

如果你使用的是 UISegmentedControlStyleBar 风格,还可以用空间的 tintColor 属性为整个控件设置渲染色彩:

    UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];  
       mySegmentedControl.tintColor = myTint;  

三、添加、删除片段



每个分段控件的片段都是一个按钮,其中包含一个标签或图片。你需要在你的控件中为每个控件创建一个片段。只要屏幕放得下,就可以有许多片段,但用户同一时刻只能选择一个片段。

    [mySegmentedControl insertSegmentWithTitle:@"First" atIndex:0 animated:YES];  
        [mySegmentedControl insertSegmentWithTitle:@"Second" atIndex:2 animated:YES];  

每个
按钮都被赋予一个索引,用这个索排序以及标识。
你也可以添加一个含有图像的片段,用inserSegmentWithImage

    [mySegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"pic"]  atIndex:3 animated:YES];  

删除片段

    [mySegmentedControl removeSegmentAtIndex:0 animated:YES];//删除一个片段   
        [mySegmentedControl removeAllSegments];//删除所有片段  

四、片段标题

    [mySegmentedControl setTitle:@"ZERO" forSegmentAtIndex:0];//设置标题   
        NSString* myTitle = [mySegmentedControl titleForSegmentAtIndex:1];//读取标题  

五、图像



每个分段也可以设置图像:

    [mySegmentedControl setImage:[UIImage imageNamed:@"pic"] forSegmentAtIndex:1];//设置   
        UIImage* myImage = [mySegmentedControl imageForSegmentAtIndex:2];//读取  

注意:图像不会自动调整大小,图片多大就会原生地显示多大,所以你要通知做图的美工大小要精确。
六、选中分段



分段控件的默认行为是,一旦按钮被选中就一直保持,直到另外一个按钮被选中为止。你可以改变这种默认的行为,变成按钮按下后很快就自动释放。将控件的momentary属性设为YES:

    mySegmentedControl.momentary = YES;  

注意:开启这个功能后点触片段不会更新 selectedSegmentedIndex,因此也就无法通过这个属性得到当前选取的片段。



初始化默认片段

默认情况下,除非你指定,否则不会有任何片段被选中。要设置 selectedSegmentedIndex 属性:

    mySegmentedControl.selectedSegmentedIndex = 0;  

七、显示控件

    [parentView addSubview:mySegmentedControl];//添加到父视图   self.navigationItem.titleView = mySegmentedControl;//添加到导航栏  

八、读取控件



通过 selectedSegmentedIndex 属性,可以读取当前选中分段的值,这个值就是选中片段的索引号。

    int x = mySegmentedControl. selectedSegmentedIndex;  

九、通知



要接收片段选取的通知,可以用UIControl类的 addTarget 方法,为 UIControlEventValueChanged 事件添加一个动作:

    [mySegmentedControl addTarget:self action:@selector(selected:) forControlEvents:UIControlEventValueChanged];  

只要选中了一个片段,你的动作方法就会被调用:

    -(void)selected:(id)sender{  
        UISegmentedControl* control = (UISegmentedControl*)sender;  
        switch (control.selectedSegmentIndex) {  
            case 0:  
                //   
                break;  
            case 1:  
                //   
                break;  
            case 2:  
                //   
                break;  

            default:  
                break;  
        }  
    }  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值