ui方面

Xcode提示"expression is not assignable"。的原因


self.view.frame.size.height = 100f;
这样写没法通过编译,编译器会报错"expression is not assignable"

原因是,这句话里面的几个点有两种不同的含义。self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame这句话会被转换成:

[[self view] frame]
也就是说,实际上这是消息传递。

而frame属性是一个CGRect结构,所以frame.size.height是C语言的语法,就是访问CGRect结构中的size字段,同样,height是CGSize结构的一个字段。所以,你这句话实际上等于:

[[self view] frame].size.height = 100f;
而Objective-C只是对C语言的一个扩展,所以,上面这句话会被转成C语言的函数调用形式,类似于这种形式:

getframe().size.height = 100f;
而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。

所以,解决办法就是,用一个临时变量保存这个函数的返回值,修改这个临时变量,然后再赋给frame:

// 1. 用一个临时变量保存返回值。
CGRect temp = self.view.frame;

// 2. 给这个变量赋值。因为变量都是L-Value,可以被赋值
temp.size.height = 100f;

// 3. 修改frame的值
self.view.frame = temp;
我知道这样写看起来有点笨,也许有一天,Objective-C的编译器会变的智能一点,自动完成这种转换。

addsubview的先后是否会影响到视图的,release呢


一.UIVIew


UIView作为可视化控件的baseclass,提供了许多属性和方法,显示效果控制(flame,alpha)等,视图添加和移除(addsubview),视图层次调整(bringsubviewtofront)。


UIview的功能:1.管理矩形区域里的内容。2.处理矩形区域的事件。3.子视图的管理。4.还能实现动画。




还包括基本的属性和方法,不一一详解。


关于button的样式问题

UIBUttontypeRoundedrect是创建一个圆角型的button,而这个UIbuttontypeCustom则是自定义风格,前面一种创建出来的字体是蓝色的默认,而后面一种则为白色,需要给他设置一个背景颜色才能显现出来,UIButtonTypeRoundedRect 设置为这个属性,是可以满足我们普通情况下的按钮圆角,当我们在button上添加背景图片和背景颜色的时候就会发现,这个属性并不适用,因为现在的button已经不是圆角的了,它显示的是图片的形状,当设置背景颜色设置为UIButtonTypeCustom属性才可以显示出来。


UIControlEventTouchDown
单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
UIControlEventTouchDownRepeat
多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
UIControlEventTouchDragInside
当一次触摸在控件窗口内拖动时。
UIControlEventTouchDragOutside
当一次触摸在控件窗口之外拖动时。
UIControlEventTouchDragEnter
当一次触摸从控件窗口之外拖动到内部时。
UIControlEventTouchDragExit
当一次触摸从控件窗口内部拖动到外部时。
 
UIControlEventTouchUpInside
所有在控件之内触摸抬起事件。
UIControlEventTouchUpOutside
所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
UIControlEventTouchCancel
所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
UIControlEventTouchChanged
当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。
UIControlEventEditingDidBegin
当文本控件中开始编辑时发送通知。
UIControlEventEditingChanged
当文本控件中的文本被改变时发送通知。
UIControlEventEditingDidEnd
当文本控件中编辑结束时发送通知。
UIControlEventEditingDidOnExit
当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
UIControlEventAlltouchEvents
通知所有触摸事件。
UIControlEventAllEditingEvents
通知所有关于文本编辑的事件。
UIControlEventAllEvents

通知所有事件。



为了验证下,做了一个实验

#import "ViewController.h"
010  
011 @interface ViewController ()
012  
013 @end
014  
015 @implementation ViewController
016  
017 - (void)viewDidLoad
018 {
019     [super viewDidLoad];
020     UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
021     [button setFrame:CGRectMake(10, 100, 300, 40)];
022     [button setTitle:@"Test" forState:UIControlStateNormal];
023     [button addTarget:self action:@selector(TouchDown:) forControlEvents:UIControlEventTouchDown];
024     [button addTarget:self action:@selector(TouchDownRepeat:) forControlEvents:UIControlEventTouchDownRepeat];
025     [button addTarget:self action:@selector(TouchDragInside:) forControlEvents:UIControlEventTouchDragInside];
026     [button addTarget:self action:@selector(TouchDragOutside:) forControlEvents:UIControlEventTouchDragOutside];
027     [button addTarget:self action:@selector(TouchDragEnter:) forControlEvents:UIControlEventTouchDragEnter];
028     [button addTarget:self action:@selector(TouchDragExit:) forControlEvents:UIControlEventTouchDragExit];
029     [button addTarget:self action:@selector(TouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
030     [button addTarget:self action:@selector(TouchUpOutside:) forControlEvents:UIControlEventTouchUpOutside];
031     [button addTarget:self action:@selector(TouchCancel:) forControlEvents:UIControlEventTouchCancel];
032     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(buttonLongPress:)];
033     longPress.minimumPressDuration = 3;
034     [button addGestureRecognizer:longPress];
035     [longPress release];
036     [self.view addSubview:button];
037 }
038  
039 - (void)TouchDown:(id)sender
040 {
041     NSLog(@"%@", NSStringFromSelector(_cmd));
042 }
043  
044  
045 - (void)TouchDownRepeat:(id)sender
046 {
047     NSLog(@"%@", NSStringFromSelector(_cmd));
048 }
049  
050 - (void)TouchDragInside:(id)sender
051 {
052     NSLog(@"%@", NSStringFromSelector(_cmd));
053 }
054  
055 - (void)TouchDragOutside:(id)sender
056 {
057     NSLog(@"%@", NSStringFromSelector(_cmd));
058 }
059  
060 - (void)TouchDragEnter:(id)sender
061 {
062     NSLog(@"%@", NSStringFromSelector(_cmd));
063 }
064  
065 - (void)TouchDragExit:(id)sender
066 {
067     NSLog(@"%@", NSStringFromSelector(_cmd));
068 }
069  
070 - (void)TouchUpInside:(id)sender
071 {
072     NSLog(@"%@", NSStringFromSelector(_cmd));
073 }
074  
075 - (void)TouchUpOutside:(id)sender
076 {
077     NSLog(@"%@", NSStringFromSelector(_cmd));
078 }
079  
080 - (void)TouchCancel:(id)sender
081 {
082     NSLog(@"%@", NSStringFromSelector(_cmd));
083 }
084  
085 - (void)didReceiveMemoryWarning
086 {
087     [super didReceiveMemoryWarning];
088     // Dispose of any resources that can be recreated.
089 }
090  
091 - (void)buttonLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
092 {
093     if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
094         NSLog(@"%@", NSStringFromSelector(_cmd));
095     }
096 }
097  
098 @end
099  
100 /**
101  * UIControlEventTouchDown           = 1 <<  0,      // on all touch downs
102  * UIControlEventTouchDownRepeat     = 1 <<  1,      // on multiple touchdowns (tap count > 1)
103  * UIControlEventTouchDragInside     = 1 <<  2,
104  * UIControlEventTouchDragOutside    = 1 <<  3,
105  * UIControlEventTouchDragEnter      = 1 <<  4,   // 注:我在模拟器上找了好久没找到这个东西什么时候触法
106  * UIControlEventTouchDragExit       = 1 <<  5,
107  * UIControlEventTouchUpInside       = 1 <<  6,
108  * UIControlEventTouchUpOutside      = 1 <<  7,
109  * UIControlEventTouchCancel         = 1 <<  8,  
110  * 按下松开,依次触发:   TouchDown:      TouchUpInside:
111  * 按下并在按钮内部拖动最后松开,依次触发:  TouchDown:    TouchDragInside:(多次)    TouchUpInside:
112  * 按着按钮拖动到按钮外不远处,依次触发: TouchDown:    TouchDragInside:(多次)    TouchUpInside:
113  * 按着按钮拖动到按钮外很远处,依次触发: TouchDown:    TouchDragInside:(多次)    TouchDragExit:    TouchDragOutside:(多次)    TouchUpOutside:
114  * 快速双击两下,依次触发: TouchDown:    TouchUpInside:    TouchDown:    TouchDownRepeat:    TouchUpInside:
115  * 快速击三下,依次触发: TouchDown:    TouchUpInside:    TouchDown:    TouchDownRepeat:    TouchUpInside:    TouchDown:    TouchDownRepeat:    TouchUpInside:
116  * 长按会依次触发: TouchDown:    buttonLongPress:    TouchCancel:
117  */
118 ------------------------------------------------------------------------------------------------------------



UITextFielddelegate委托方法注释

- (BOOL)textFieldShouldBeginEdit ing:(UITextField *)textField{  
      //返回一个BOOL值,指定是否循序文本字段开始编辑  
      return YES;  
}  
 
- (void)textFieldDidBeginEditing :(UITextField *)textField{
      //开始编辑时触发,文本字段将成为first responder
}
 
- (BOOL)textFieldShouldEndEditin g:(UITextField *)textField{
      //返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder
      //要想在用户结束编辑时阻止文本字段消失,可以返回NO
      //这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息
      return NO;
}
 
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersIn Range:(NSRange)range replacementString:(NSString *)string{
      //当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
      //这对于想要加入撤销选项的应用程序特别有用
      //可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。    
      //要防止文字被改变可以返回NO
      //这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
      return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
      //返回一个BOOL值指明是否允许根据用户请求清除内容
      //可以设置在特定条件下才允许清除内容
      return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
      //返回一个BOOL值,指明是否允许在按下回车键时结束编辑
      //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起
      [textField resignFirstResponder];//查一下resign这个单词的意思就明白这个方法了
      return YES;
}


IOS程序启动流程

任何程序启动都是从main。m文件的main函数开始的,然后转到了appdelegate,我们可以看到appdeletegate中存在这样几个方法大


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

告诉delegate程序即将完成,程序准备运行


- (void)applicationWillResignActive:(UIApplication *)application

告诉delegate程序即将进入非活跃状态(暂停游戏,停止timer等)


- (void)applicationDidEnterBackground:(UIApplication *)application

告诉delegate应用程序已经进入后台


- (void)applicationDidBecomeActive:(UIApplication *)application

告诉delegate应用程序已经进入活跃状态


- (void)applicationWillEnterForeground:(UIApplication *)application

告诉delegate应用程序即将进入前台


视图控制器加载过程





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值