iPhone App Programming_2016_lecture8.key

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "iPhone App Programming_2016_lecture8.key"

Transcription

1 ios 程序设计 第八讲 : 可视化控件的使用 (UIControls) 华南师范大学网络教育学院

2 截 到 ios 版本的占有率 Feb 2016 潘战生华南师范大学网络教育学院

3 潘战生华南师范大学网络教育学院

4 潘战生华南师范大学网络教育学院

5 潘战生华南师范大学网络教育学院

6 潘战生华南师范大学网络教育学院

7 第七章 UI 控件 1. UISlider var value: Float value 缺省情况下值在 之间 可在 Value Changed 事件中响应值的变化 func valuechanged(sender: AnyObject) {... } 潘战生华南师范大学网络教育学院

8 第七章 UI 控件 1. UISlider var value: Float value 缺省情况下值在 之间 可在 Value Changed 事件中响应值的变化 func valuechanged(sender: AnyObject) {... } 潘战生华南师范大学网络教育学院

9 第七章 UI 控件 1. UISlider var value: Float value 缺省情况下值在 之间 可在 Value Changed 事件中响应值的变化 func valuechanged(sender: AnyObject) {... } 潘战生华南师范大学网络教育学院

10 代码创建 UISlider: var frame: CGRect = CGRectMake(198.0, 12.0, 94.0, 27.0) var sliderctl = UISlider(frame:frame) sliderctl.addtarget(self, action:selector( slideraction:"), forcontrolevents:uicontrolevents.valuechanged) func valuechanged(sender: AnyObject) {... } 潘战生华南师范大学网络教育学院

11 2. UISwitch var on:bool on 的值为 true 或 false 可在 Value Changed 事件中响应 on 值的变化 func switchvaluechanged(sender: AnyObject) {... } 潘战生华南师范大学网络教育学院

12 3. UIPickerView 提供列表数据供用户选择 (ios 7 以前 ): 潘战生华南师范大学网络教育学院

13 3. UIPickerView 提供列表数据供用户选择 (ios 7 以后 ):

14 UIPickerView row title component component 潘战生华南师范大学网络教育学院

15 UIPickerView func reloadallcomponents() func reloadcomponent(_ component:) func selectedrowincomponent(_ component:)->int func selectrow(_ row:, incomponent:,animated:) 潘战生华南师范大学网络教育学院

16 UIPickerView delegate UIPickerView UIPickerViewDelegate datasource UIPickerView ( Component row ) UIPickerViewDataSource UIPickerView 潘战生华南师范大学网络教育学院

17 UIPickerViewDelegate component pickerview(_ pickerview:, didselectrow:, incomponent:) component row pickerview(_ pickerview:, titleforrow:, forcomponent:) 潘战生华南师范大学网络教育学院

18 UIPickerViewDataSource numberofcomponentsinpickerview(_ pickerview:)->int pickerview(_ pickerview:, numberofrowsincomponent:) 潘战生华南师范大学网络教育学院

19 UITextField 可编辑的单行文本 属性 text 为文本内容 键盘的消除 (dismiss) 可实现 UITextFieldDelegate 的 textfieldshouldreturn(_ textfield:)->int textfield.resignfirstresponder() 潘战生华南师范大学网络教育学院

20 4.UISegmentedControl UISegmentedControl func buttonpressed(sender:anyobject) { var control=sender as UISegmentedControl if control.selectedsegmentindex == 0{... } } 潘战生华南师范大学网络教育学院

21 5. UIToolBar 先看看处于导航环境下 UIViewController 的导航栏及 工具栏 潘战生华南师范大学网络教育学院

22

23

24 导航栏显示当前视图控制器标题 (title) 及其导航栏工具 (navigationitem)

25 导航栏显示当前视图控制器标题 (title) 及其导航栏工具 (navigationitem) 工具栏显示当前视图控制器工具栏 toolbaritems

26 导航栏显示当前视图控制器标题 (title) 及其导航栏工具 (navigationitem) 工具栏显示当前视图控制器工具栏 toolbaritems

27 导航栏显示当前视图控制器标题 (title) 及其导航栏工具 (navigationitem) 工具栏显示当前视图控制器工具栏 toolbaritems 视图区显示当前视图控制器视图 (view)

28 导航栏显示当前视图控制器标题 (title) 及其导航栏工具 (navigationitem) 工具栏显示当前视图控制器工具栏 toolbaritems 视图区显示当前视图控制器视图 (view)

29 导航栏显示当前视图控制器标题 (title) 及其导航栏工具 (navigationitem) 工具栏显示当前视图控制器工具栏 toolbaritems 视图区显示当前视图控制器视图 (view) 左上角 后退 按钮显示前一个视图控 制器标题 (title) 文本

30 UIViewController 视图控制器中 : navigationitem leftbarbuttonitem(s) rightbarbuttonitem(s) toolbaritems

31 从导航控制器来看 : // 获取程序主窗口对象 var win:uiwindow = UIApplication.sharedApplication().delegate.window! // 获取导航控制器对象 var nav:uinavigationcontroller = UINavigationController(rootViewController: win.rootviewcontroller) // 导航控制器对象的 navigationbar 属性 var nb = nav.navigationbar // items 的数目为 UINavigationItem 堆栈内的项数 var items = nb.items // 每个 item 为堆栈中视图控制器的导航项 var ni = items[0] as UINavigationItem var nbbi = ni.rightbarbuttonitem UINavigationController 的 toolbar 属性类似

32 从导航控制器来看 : UINavigationController 的 toolbar 属性类似

33 Storyboard UIToolBar UIToolBar items var items[anyobject] UIbarButtonItem :BarButtonItemAndToolBar 潘战生华南师范大学网络教育学院

34 Return Data 示例 : Model View

35 : class MasterViewController : UITableViewController{ var allitems:array? var databack:string? // } class ModalViewViewController : UIViewController{ var mydata:string? var master:masterviewcontroller?... }

36

37 :

38 : // delegate protocol,used for modalviewcontroller post data back protocol ModalViewControllerDelegate{ func willdismissmodalview(_ sender:anyobject) }

39 : // delegate protocol,used for modalviewcontroller post data back protocol ModalViewControllerDelegate{ func willdismissmodalview(_ sender:anyobject) } class MasterViewController : UITableViewController, <ModalViewControllerDelegate>{ var allitems:array?... }

40 : // delegate protocol,used for modalviewcontroller post data back protocol ModalViewControllerDelegate{ func willdismissmodalview(_ sender:anyobject) } class MasterViewController : UITableViewController, <ModalViewControllerDelegate>{ var allitems:array?... } class ModalViewViewController : UIViewController{ var mydata:string weak var func doneaction(_ func CancelAction(_ sender) }

41 : // delegate protocol,used for modalviewcontroller post data back protocol ModalViewControllerDelegate{ func willdismissmodalview(_ sender:anyobject) } class MasterViewController : UITableViewController, <ModalViewControllerDelegate>{ 避免 Retain Cycle: var allitems:array?... } class A{ var b:b } class B{ var a:a class ModalViewViewController : UIViewController{ } var mydata:string weak var func doneaction(_ func CancelAction(_ sender) }

42 : // delegate protocol,used for modalviewcontroller post data back protocol ModalViewControllerDelegate{ func willdismissmodalview(_ sender:anyobject) } class MasterViewController : UITableViewController, <ModalViewControllerDelegate>{ var allitems:array?... } class ModalViewViewController : UIViewController{ var mydata:string weak var func doneaction(_ func CancelAction(_ sender) }

43 6.UIActionSheet UIActionSheet UIActionSheetDelegate actionsheet(_ actionsheet:,clickedbuttonatindex:) ActionSheet (dismiss) actionsheet(_ actionsheet,diddismisswithbuttonindex:)

44 6.UIActionSheet UIActionSheet UIActionSheetDelegate actionsheet(_ actionsheet:,clickedbuttonatindex:) ActionSheet (dismiss) actionsheet(_ actionsheet,diddismisswithbuttonindex:)

45 6.UIActionSheet UIActionSheet UIActionSheetDelegate actionsheet(_ actionsheet:,clickedbuttonatindex:) ActionSheet (dismiss) actionsheet(_ actionsheet,diddismisswithbuttonindex:)

46 7.UIAlertView (Alert) UIAlertViewDelegate alertview(_ alertview, clickedbuttonatindex:)

47 7.UIAlertView (Alert) UIAlertViewDelegate alertview(_ alertview, clickedbuttonatindex:)

48 7.UIAlertView (Alert) UIAlertViewDelegate alertview(_ alertview, clickedbuttonatindex:)

49 UIAlertView UIActionSheet UIAlertView UIActionSheet Apple ios UI Element Usage Guidelines UIControlDemo

50 UIAlertController(iOS 8+) ios 8 引入 UIAlertController, 统一了 AlertView 及 ActionSheet 的使用 : 简单易用, 轻易在 alert view 及 action sheet 样式之间切换可配合闭包使用自适应, 在 ipad 下运行时自动以 popover 呈现

51 将样式改为 Alert 即成为 alert view 由于 ipad 环境下 action sheet 需要以 popover 形式呈现, 故应加上以下代码 : alert.popoverpresentationcontroller?.sourceview = view alert.popoverpresentationcontroller?.sourcerect = sender.frame

52 UIPageViewController UIPageViewController 是 ios 5 引入的新界面, 用于显示一系列 UIViewController 的场景 用户使用轻扫 (swipe) 动作在水平或垂直方向在各个场景间切换 ibooks 是典型的使用 UIPageViewController 的例子 Xcode 有 Page-Based Application 模版

53 UIPageViewController 页面切换样式 : enum UIPageViewControllerTransitionStyle : Int { } case PageCurl // Navigate between views via a page curl transition. case Scroll // Navigate between views by scrolling. PageCurl 切换样式且 doublesided = true

54

55 UIPageViewController 重要的属性 :

56 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器

57 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 单页 viewcontrollers=[vc]

58 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器

59 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 双页 viewcontrollers= [ vc1,vc2 ]

60 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器

61 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 var delegate: UIPageViewControllerDelegate?

62 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 var delegate: UIPageViewControllerDelegate?

63 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 var delegate: UIPageViewControllerDelegate? var datasource: UIPageViewControllerDataSource

64 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 var delegate: UIPageViewControllerDelegate? var datasource: UIPageViewControllerDataSource

65 UIPageViewController 重要的属性 : var viewcontrollers: [AnyObject]! {get} 某时刻同时显示的内容控制器 var delegate: UIPageViewControllerDelegate? var datasource: UIPageViewControllerDataSource var doublesided: Bool 页面切换时反面是否显示内容

66 UIPageViewController 重要的属性 : var spinelocation: UIPageViewControllerSpineLocation {get} spinelocation 书脊位置 仅对 PageCurl 有效 Min Max Mid

67

68 示例 :PageViewControl

69 UIViewController Containment ios 设备的屏幕越来越大, 分辨率也越来越高, 使得应用程序可将屏幕分割成多个区域, 如图所示 UIViewController Containment 特性可将个区域子视图所对应的视图控制器添加成根视图控制器的子控制器, 形成控制器的层次结构 (Hierarchy), 如此, 屏幕上发生的事件 ( 如手势 设备方向变化等 ) 可以由根视图控制器传递到各子视图控制器, 以便各子视图控制器对事件进行处理

70 UIViewController Containment func addchildviewcontroller(_ childcontroller: UIViewController) 根视图控制器调用, 将指定视图控制器添加为其子视图控制器 func removefromparentviewcontroller() 子视图控制器调用, 将自己从父视图控制器层次中移除 func transitionfromviewcontroller(_ fromviewcontroller, toviewcontroller,duration,options,animations,completion) 用一个视图替代另一个视图的方法, 或将一个子视图移到屏幕最前 func willmovetoparentviewcontroller(_ parent: UIViewController?) 调用 addchildviewcontroller 方法后会自动调用本方法, 可进行子控制器添加到父控制器之前需要的操作 func didmovetoparentviewcontroller(_ parent: UIViewController?) 在调用 addchildviewcontroller 方法后, 子视图控制器必须调用该方法

71 UIViewController Containment 程序设计 (adap)

72 UIViewController Containment 程序设计 (adap) 1. Storyboard

73 UIViewController Containment 程序设计 (adap) 1. Storyboard 在根视图控制器上放置若干 Container View 以及对应数目的控制器场景, 在 StoryBoard 中设置他们的所属关系即可

74 UIViewController Containment 程序设计 (adap) 1. Storyboard 在根视图控制器上放置若干 Container View 以及对应数目的控制器场景, 在 StoryBoard 中设置他们的所属关系即可 2. Code

75 UIViewController Containment 程序设计 (adap) 1. Storyboard 在根视图控制器上放置若干 Container View 以及对应数目的控制器场景, 在 StoryBoard 中设置他们的所属关系即可 2. Code

76 UIViewController Containment 程序设计 (adap) 1. Storyboard 在根视图控制器上放置若干 Container View 以及对应数目的控制器场景, 在 StoryBoard 中设置他们的所属关系即可 2. Code

77 附录 : 导航栏对象

78