UIControl IOS控件编程—IOS开发

本文详细介绍了UIKit框架中的UIControl控件,包括其属性如enabled、selected、contentVerticalAlignment、contentHorizontalAlignment,以及事件通知机制。文章还提供了UIControl类的事件类型概述,帮助开发者更好地理解和利用这些控件。通过阅读本文,读者能够掌握如何自定义控件以满足特定应用需求。


各位亲 有时间可以去看看我的  “金骏家居淘宝店” http://jinjun1688.taobao.com/shop/view_shop.htm?tracelog=twddp 买时说明在我的博客看到有优惠哦 还有意外礼品赠送  真正的程序员淘宝店

UIKit提供了一组控件:UISwitch开关、UIButton按钮、UISegmentedControl分段控件、UISlider滑块、UITextField文本字段控件、UIPageControl分页控件。

控件是对UIView派生类的实用增强及补充,并可以直接附着于导航栏、表格单元,甚至更大的对象。

这些控件的基类均是UIControl,而UIControl派生自UIView类,所以每个控件都有很多视图的特性,包括附着于其他视图的能力。所有控件都拥有一套共同的属性和方法。

所以学习控件,我们先学习UIControl。

属性

enabled

控件默认是启用的。要禁用控件,可以将enabled属性设置为NO,这将导致控件忽略任何触摸事件。被禁用后,控件还可以用不同的方式显示自己,比如变成灰色不可用。虽然是由控件的子类完成的,这个属性却存在于UIControl中。

selected

当用户选中控件时,UIControl类会将其selected属性设置为YES。子类有时使用这个属性来让控件选择自身,或者来表现不同的行为方式。

contentVerticalAlignment

控件如何在垂直方向上布置自身的内容。默认是将内容顶端对其,对于文本字段,可能会改成UIControlContentVerticalAlignmentCenter。对于这个字段,可以使用下列诸值:

[java]  view plain copy print ?
  1. UIControlContentVerticalAlignmentCenter  
  2. UIControlContentVerticalAlignmentTop  
  3. UIControlContentVerticalAlignmentBottom  
  4. UIControlContentVerticalAlignmentFill  
contentHorizontalAlignment

水平对齐方式,可以只用下列值:

[java]  view plain copy print ?
  1. UIControlContentHorizontalAlignmentCenter  
  2. UIControlContentHorizontalAlignmentTop  
  3. UIControlContentHorizontalAlignmentBottom  
  4. UIControlContentHorizontalAlignmentFill  

事件通知

UIControl类提供了一个标准机制,来进行事件登记和接收。这令你可以指定你的控件在发生特定事件时,通知代理类的一个方法。如果要注册一个事件,可以使用addTarget方法:

[java]  view plain copy print ?
  1. [ myControl addTarget: myDelegate   
  2.             action:@selector(myActionmethod:)  
  3.             forControlEvents:UIControlEventValueChanged ];  
事件可以用逻辑OR合并在一起,因此可以再一次单独的addTarget调用中指定多个事件。下列事件为基类UIControl所支持,除非另有说明,也适用于所有控件。

UIControlEventTouchDown

单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。

UIControlEventTouchDownRepeat

多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。

UIControlEventTouchDragInside

当一次触摸在控件窗口内拖动时。

UIControlEventTouchDragOutside

当一次触摸在控件窗口之外拖动时。

UIControlEventTouchDragEnter

当一次触摸从控件窗口之外拖动到内部时。

UIControlEventTouchDragExit

当一次触摸从控件窗口内部拖动到外部时。

UIControlEventTouchUpInside

所有在控件之内触摸抬起事件。

UIControlEventTouchUpOutside

所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。

UIControlEventTouchCancel

所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。

UIControlEventTouchChanged

当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。

UIControlEventEditingDidBegin

当文本控件中开始编辑时发送通知。

UIControlEventEditingChanged

当文本控件中的文本被改变时发送通知。

UIControlEventEditingDidEnd

当文本控件中编辑结束时发送通知。

UIControlEventEditingDidOnExit

当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。

UIControlEventAlltouchEvents

通知所有触摸事件。

UIControlEventAllEditingEvents

通知所有关于文本编辑的事件。

UIControlEventAllEvents

通知所有事件。

除了默认事件以外,自定义控件类还可以用0x0F000000到0x0FFFFFFF之间的值,来定义他们自己的时间。

要删除一个或多个事件的相应动作,可以使用UIControl类的removeTarget方法。使用nil值就可以将给定事件目标的所有动作删除:

[java]  view plain copy print ?
  1. [ myControl removeTarget:myDelegate   
  2.                   action:nil  
  3.                   forControlEvents:UIControlEventAllEvents];  
要取得关于一个控件所有指定动作的列表,可以使用allTargets方法。这个方法返回一个NSSet,其中包含事件的完整列表:

[java]  view plain copy print ?
  1. NSSet* myActions = [myConreol allTargets ];  
另外,你还可以用actionsForTarget方法,来获取针对某一特定事件目标的全部动作列表:
[java]  view plain copy print ?
  1. NSArray* myActions = [ myControl actionForTarget:UIControlEventValueChanged ];  

如果设计了一个自定义控件类,可以使用sendActionsForControlEvent方法,为基本的UIControl事件或自己的自定义事件发送通知。例如,如果你的控件值正在发生变化,就可以发送相应通知,通过控件的代码可以指定时间目标,这个通知将被传播到这些指定的目标。例:

[java]  view plain copy print ?
  1. [ self sendActionsForControlEvents:UIControlEventValueChanged ];  
当委托类得到事件通知时,他将收到一个指向事件发送者的指针。下面的例子用于处理分段控件的事件,你的动作方法(action method)应遵循类似的处理方式:

[java]  view plain copy print ?
  1. -(void) myAction:(id)sender{  
  2.        UISegmentedControl* control = (UISegmentedControl*)sender;  
  3.        if(control == myControl1){  
  4.         /*查询控件得值*/  
  5.       /*响应myControl1的动作*/  
  6.        }  
  7. }  

此文到此结束,如果你能耐心看看这篇文章,对你后面具体的控件会有事半功倍的效果。



http://blog.youkuaiyun.com/iukey/article/details/7300412

<think>好的,我现在需要解决用户在安装bundle时遇到的权限授予请求失败的问题,错误代码是9568289。用户已经提供了错误信息:“failed to install bundle error 9568289 grant request permissions failed solution”。我需要根据这个错误代码和描述,给出有效的解决方案。 首先,我应该考虑这个错误可能的原因。权限问题通常涉及应用缺乏必要的权限,或者系统设置阻止了安装。可能的方面包括:应用权限设置、系统安装权限、安全软件拦截、系统版本兼容性、存储权限等。 接下来,我需要逐步分析每个可能的原因,并提供对应的解决步骤。例如,检查应用权限是否被拒绝,确保安装未知应用的权限开启,清除缓存和数据,检查存储空间,更新系统等。同时,可能需要指导用户如何进入设置界面进行操作,这需要步骤详细且易懂。 此外,用户可能是在特定的设备或系统版本上遇到这个问题,比如华为的EMUI或者其他定制Android系统,这些系统可能有不同的设置路径。需要考虑到不同设备的差异,给出通用的方法,或者建议用户查找对应品牌的设置方式。 还要注意,某些安全软件或手机管家可能会限制安装,提醒用户暂时禁用这些应用。另外,安装包本身可能损坏,建议重新下载。如果问题依旧,可能需要联系设备制造商寻求支持。 在组织回答时,需要分点列出解决方案,结构清晰,步骤明确。同时,生成的相关问题要围绕权限错误、安装失败、系统设置等主题,帮助用户进一步排查问题。 最后,确保回答符合格式要求:使用中文,行内公式正确(虽然这个问题可能不涉及数学公式,但需注意其他格式要求),引用标识自然添加,代码块(如果有)正确使用语法。由于用户的问题属于技术支持类,可能不需要数学公式,但需要确保其他格式正确,如分点列表和代码示例(如果有的话)。 现在,我需要整理这些思路,形成结构化的解决方案,并生成相关问题。</think>### 解决安装Bundle时权限授予失败(错误9568289)的方法 #### 1. 检查应用权限设置 - **步骤**:进入手机设置 → 应用管理 → 找到安装Bundle的应用(如应用市场或安装器) → 点击「权限」 → 确保「存储空间」「安装应用」等权限已开启。 - **原因**:权限被拒绝可能导致安装流程中断[^1]。 #### 2. 开启「安装未知应用」权限 - **步骤**(以华为EMUI为例): 1. 进入设置 → 安全 → 更多安全设置 → 允许安装外部来源应用。 2. 找到对应的应用(如浏览器或文件管理器),开启权限。 - **说明**:部分系统会限制非官方渠道应用的安装[^2]。 #### 3. 清除应用缓存与数据 - **步骤**:设置 → 应用管理 → 选择安装器/应用市场 → 点击「存储」 → 清除缓存和数据 → 重启设备。 - **作用**:修复因缓存错误导致的权限请求异常。 #### 4. 检查存储空间与文件完整性 - **存储空间**:确保设备剩余空间大于Bundle文件大小的2倍。 - **文件损坏**:重新下载Bundle文件,或验证文件哈希值是否匹配。 #### 5. 关闭安全软件临时防护 - **操作**:暂时禁用手机管家、第三方杀毒软件等,测试是否仍报错。 #### 6. 系统更新与重置 - **系统更新**:前往设置 → 系统更新 → 检查最新版本。 - **恢复出厂设置**(最后手段):备份数据后,重置系统以修复深层权限冲突。 #### 7. 联系设备厂商 - 如果以上步骤无效,可能是系统定制化限制,需联系品牌客服提供错误代码9568289的日志分析。 ```plaintext 示例adb调试命令(需USB调试开启): adb logcat | findstr "9568289" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值