• 事件方法参数 、 常用控件 、 控件和委托


    1 使用事件方法参数获取事件源对象

    1.1 问题

    通过xib构建如图-1所示界面,通过关联Button的IBAction方法来改变Label的text。

    图- 1

    当点击Button时可以改变Label的text,如图-2所示:

    图- 2

    1.2 方案

    首先跟之前的案例一样用Xcode创建一个带有xib的项目,在xib上面构建好界面,界面的上方拖放一个Label和一个Button,然后在下方拖放十个title为0~9的Button,如图-3所示:

    图-3

    其次关联Label为viewController的私有属性myLabel,关联Button为viewController的私有方法tapButton。

    然后实现tapButton方法,修改Label的text为@“hello”。

    第四关联title为0~9的Button为带参数的IBAction方法tapButton:(*UIButton)sender,此时sender就是被点击的Button本身。

    第五实现tapButton:(*UIButton)sender方法,修改myLabel的text为被点击Button的title。

    1.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:将Label和Button与代码关联

    分别使用IBOutlet和IBAction将Label和Button与代码关联,关联之后自动生成的代码如图-4,图-5所示,并且代码前的圆圈为实心的:

    图-4

    图-5

    步骤二:实现IBAction方法

    实现tapButton方法,此案例中点击按钮时修改myLabel的text为@“hello”,代码如下所示:

    1. - (IBAction)tapButton
    2. {
    3. self.myLabel.text = @"Hello";
    4. }

    步骤三:给button0~button9添加点击事件

    选择xib中的button1,按住control键,将button1拖拽到TRViewController.m文件中,释放鼠标,会弹出如图-6所示的窗口:

    图-6

    在弹出窗口里将动作命名为tap,type选择为UIButton,arguments选为Sender,表示带参数的方法,此时传递的参数就是被点击的按钮本身,如图-7所示:

    图-7

    点击connect按钮,TRViewController.m文件中生成如图-8中的方法,并且此方法前会出现一个实心的圆圈,button1对象点击事件添加成功,如图-8所示:

    图-8

    然后将button2与此方法关联,按住代码前的实心圆圈,往xib中的button2拖拽,button2高亮显示之后释放鼠标,其他几个按钮也依次按照此方法关联,如图-9所示:

    图-9

    完成以上操作之后可以查看是否关联成功,选中button2,点击右键,弹出如图-10窗口,可见其中Touch Up Inside事件和File‘s Owner的tap:方法是由一条线连接上的,如图-10中的红色框所示,表示其button2和代码关联成功,其他按钮也可按此方法查看。

    图-10

    步骤四:实现tap:方法

    本案例中每次点击button0~button9,修改label的text为按钮的title,所以在此方法里,先获取到被点击按钮的title,然后修改myLabel的text,代码如下所示:

     
    1. - (IBAction)tap:(UIButton *)sender
    2. {
    3. //参数sender即被点击的按钮,通过sender获取button的title
    4. NSString *title = [sender titleForState:UIControlStateNormal];
    5. //将myLabel的text的值设置为title
    6. self.myLabel.text = title;
    7. }

    1.4 完整代码

    本案例中,viewController类.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController ()
    3. @property (weak, nonatomic) IBOutlet UILabel *myLabel;
    4. @end
    5. @implementation TRViewController
    6. - (IBAction)tapButton
    7. {
    8. self.myLabel.text = @"Hello";
    9. }
    10. - (IBAction)tap:(UIButton *)sender
    11. {
    12. NSString *title = [sender titleForState:UIControlStateNormal];
    13. self.myLabel.text = title;
    14. }
     

    2 使用UIStepper控件获取用户操作数据,处理事件

    2.1 问题

    使用UIStepper控件获取用户数据,处理事件。UIStepper控件可以连续增加或减少一个数值,本案例通过使用UIStepper控件改变一个label显示的数据,如图-11所示:

    图- 11

    2.2 方案

    首先使用Xcode创建一个带有xib的SingleViewApplication项目,从对象库中拖拽一UIStepper控件到xib中构建界面。UIStepper控件的外观是由两个水平并排的按钮构成,一个显示为“+”,一个显示为“-”,如图-12所示:

    图- 12

    其次选中stepper,在右边栏的第四个检查器里面设置各个控件的相关属性。

    第三将各控件关联成viewController的私有属性(IBOutlet)或者私有方法(IBAction)。

    最后在viewController.m文件中用代码实现相应的需求逻辑。

    2.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:在xib上拖放UIStepper控件

    使用Xcode创建一个带有xib的SingleViewApplication项目,从对象库中拖拽一个UILabel控件和UIStepper控件到xib中,将label的text设置为0,如图-13所示:

    图-13

    步骤二:设置属性

    选中stepper,在右边栏的第四个检查器里面设置stepper的各项属性,value表示当前值,stepValue表示步进值,minimumValue表示最小值,maximumValue表示最大值,如图-14所示:

    图-14

    步骤三:关联属性和方法

    以拉线的形式将label对象和stepper对象关联成viewController的私有属性stepperLabel和stepper,代码如下所示:

    1. @property (weak, nonatomic) IBOutlet UILabel *stepperLabel;
    2. @property (weak, nonatomic) IBOutlet UIStepper *stepper;

    然后同按钮一样按住control键,给stepper添加点击事件,此时的event应该选择valueChanged,响应的消息命名为stepperValueChanged:,如图-15所示:

    图-15

    步骤四:实现方法

    最后实现stepperValueChanged:方法,通过stepper改变stepperLabel的text值,代码如下所示:

     
    1. - (IBAction)stepperValueChanged:(UIStepper *)sender
    2. {
    3. NSString *valueString = [NSString stringWithFormat:@"%.0f", sender.value];
    4. self.stepperLabel.text = valueString;
    5. }

    2.4 完整代码

    本案例中,TRViewController.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController ()
    3. @property (weak, nonatomic) IBOutlet UILabel *stepperLabel;
    4. @property (weak, nonatomic) IBOutlet UIStepper *stepper;
    5. @end
    6. @implementation TRViewController
    7. - (IBAction)stepperValueChanged:(UIStepper *)sender
    8. {
    9. NSString *valueString = [NSString stringWithFormat:@"%.0f", sender.value];
    10. self.stepperLabel.text = valueString;
    11. }
    12. @end
     

    3 使用UISlider控件处理事件,获取用户数据

    3.1 问题

    使用UISlider控件获取用户数据,处理事件。UISlider滑块控件拖动滑块的按钮可以改变属性value的值,本案例通过UISlider控件实现一个简易的调色板功能,滑动滑动改变矩形框中的背景颜色,如图-16所示:

    图- 16

    3.2 方案

    直接在上一个案例的基础上构建界面,从对象库中拖拽一个UISlider控件到xib中构建界面,如图-17所示:

    图- 17

    其次选中相应控件,在右边栏的第四个检查器里面设置各个控件的相关属性。

    第三将各控件关联成viewController的私有属性(IBOutlet)或者私有方法(IBAction)。

    最后在viewController.m文件中用代码实现相应的需求逻辑。

    3.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:在xib上拖放UISlider控件

    在上一个案例的基础上,首先从对象库中拖拽两个UILabel控件和UISlider控件到xib中,然后在右边的第四个检查器设置两个label对象的显示内容和背景颜色,如图-18所示:

    图-18

    步骤二:设置UISlider控件的属性

    选中UISlider对象,在右边的第四个检查器设置slider的各项属性,value表示当前值,minimumValue表示最小值,maximumValue表示最大值,本案例将最小值设置为0,最大值设置为1,当前值设置为0,如图-19所示:

    图-19

    步骤三:关联属性和方法

    将两个label对象关联成viewController的私有属性displayColorLabel和displayNumberLabel,代码如下所示:

     
    1. @property (weak, nonatomic) IBOutlet UILabel *displayColorLabel;
    2. @property (weak, nonatomic) IBOutlet UILabel *displayNumberLabel;

    然后同stepper一样,给slider对象添加点击事件,此时的event同样也是选择valueChanged,响应的消息命名为sliderValueChanged:。

    步骤四:实现方法sliderValueChanged:

    本案例实现一个简单的调色板功能,即滑动slider的按钮可以改变displayColorLabel的背景颜色,此处背景颜色对象使用工厂方法colorWithRed:green:blue:alpha:创建,sliderValueChanged:方法中的代码如下所示:

     
    1. - (IBAction)sliderValueChanged:(UISlider *)sender
    2. {
    3.         //改变displayColorLabel的背景颜色
    4. self.displayColorLabel.backgroundColor = [UIColor colorWithRed:sender.value green:0.0 blue:0.0 alpha:1.0];
    5. self.displayNumberLabel.text = [NSString stringWithFormat:@"红色:%.0f", sender.value * 255];
    6. }

    3.4 完整代码

    本案例中,TRViewController.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController ()
    3. @property (weak, nonatomic) IBOutlet UILabel *stepperLabel;
    4. @property (weak, nonatomic) IBOutlet UIStepper *stepper;
    5. @property (weak, nonatomic) IBOutlet UILabel *displayColorLabel;
    6. @property (weak, nonatomic) IBOutlet UILabel *displayNumberLabel;
    7. @end
    8. @implementation TRViewController
    9. - (IBAction)stepperValueChanged:(UIStepper *)sender
    10. {
    11. NSString *valueString = [NSString stringWithFormat:@"%.0f", sender.value];
    12. self.stepperLabel.text = valueString;
    13. }
    14. - (IBAction)sliderValueChanged:(UISlider *)sender
    15. {
    16. self.displayColorLabel.backgroundColor = [UIColor colorWithRed:sender.value green:0.0 blue:0.0 alpha:1.0];
    17. self.displayNumberLabel.text = [NSString stringWithFormat:@"红色:%.0f", sender.value * 255];
    18. }
    19.     @end
     

    4 使用UISwitch控件处理事件,获取用户选择

    4.1 问题

    使用UISwitch控件获取用户数据,处理事件。UISwitch开关控件类似于windows中的复选框,只有两种状态YES和NO,由属性on来控制,本案例实现点击一个开关能够同时控制两个开关的状态,如图-20所示:

    图- 20

    4.2 方案

    直接在上一个案例的基础上构建界面,从对象库中拖拽一个UISwitch控件到xib中构建界面,如图-21所示:

    图- 21

    其次将各控件关联成viewController的私有属性(IBOutlet)或者私有方法(IBAction)。

    最后在viewController.m文件中用代码实现相应的需求逻辑。

    4.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:在xib上拖放UISwitch控件

    在上一个案例的基础上,首先从对象库中拖拽两个UISwitch控件到xib中,如图-22所示:

    图-22

    步骤二:关联属性和方法

    拉线的方式为两个switch对象指定输出口,起名为switch1和switch2,代码如下所示:

    1. @property (weak, nonatomic) IBOutlet UISwitch *switch1;
    2. @property (weak, nonatomic) IBOutlet UISwitch *switch2;

    然后给两个UISwitch对象添加同一个点击事件,此时的event同样是选择valueChanged,响应的消息命名为switchChanged:。

    步骤三:实现方法

    最后实现switchChanged:方法,该方法的作用是同时控制两个开关的值,开关的值由属性on来控制,代码如下所示:

     
    1. - (IBAction)switchChanged:(UISwitch *)sender
    2. {
    3. [self.switch1 setOn:sender.on animated:YES];
    4. [self.switch2 setOn:sender.on animated:YES];
    5. }

    4.4 完整代码

    本案例中,TRViewController.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController ()
    3. @property (weak, nonatomic) IBOutlet UILabel *stepperLabel;
    4. @property (weak, nonatomic) IBOutlet UIStepper *stepper;
    5. @property (weak, nonatomic) IBOutlet UILabel *displayColorLabel;
    6. @property (weak, nonatomic) IBOutlet UILabel *displayNumberLabel;
    7. @property (weak, nonatomic) IBOutlet UISwitch *switch1;
    8. @property (weak, nonatomic) IBOutlet UISwitch *switch2;
    9. @end
    10. @implementation TRViewController
    11. - (IBAction)stepperValueChanged:(UIStepper *)sender
    12. {
    13. NSString *valueString = [NSString stringWithFormat:@"%.0f", sender.value];
    14. self.stepperLabel.text = valueString;
    15. }
    16. - (IBAction)sliderValueChanged:(UISlider *)sender
    17. {
    18. self.displayColorLabel.backgroundColor = [UIColor colorWithRed:sender.value green:0.0 blue:0.0 alpha:1.0];
    19. self.displayNumberLabel.text = [NSString stringWithFormat:@"红色:%.0f", sender.value * 255];
    20. }
    21. - (IBAction)switchChanged:(UISwitch *)sender
    22. {
    23. [self.switch1 setOn:sender.on animated:YES];
    24. [self.switch2 setOn:sender.on animated:YES];
    25. }
    26. @end
     

    5 使用UITextField实现一个简易的登录界面

    5.1 问题

    UITextField文本输入框提供文本编辑功能,可以用来接受用户的输入,因此会涉及到键盘的使用,如图-23所示:

    图-23

    本案例实现一个简单的用户登录界面,在textField进入编辑状态时,键盘会从下方滑出,当点击确定按钮和屏幕时会退出关闭键盘,如图-24所示:

    图- 24

    5.2 方案

    首先Xcode创建一个带有xib的SingleViewApplication项目,从对象库中拖拽两个UILabel,两个UITextField和一个UIButton对象,按照图-24构建界面。

    其次设置textField的相关属性。

    然后将xib中的UITextField对象和UIButton对象与代码关联。

    最后用代码实现点击确定按钮和屏幕时退出键盘功能。

    5.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:构建界面

    首先在xib中拖放两个label,两个textField和一个button,将两个label的text别分修改为user和password,相对应的第一个textField接受用户输入用户名,第二个textField接受用户输入密码,按钮的title修改为“确定”,如图-25所示:

    图-25

    步骤二:设置textField的属性

    其次选中第一个textField对象,在右边栏的第四个检查器里设置相关属性,在Placeholder属性中输入username,用来提示用户输入的信息,第二个textField对象的Placeholder属性设置为password,如图-26,图-27所示:

    图-26

    图-27

    步骤三:给textField和button添加点击事件

    首先将两个textField属性关联成viewController的私有属性usernameTextField和passwordTextField,代码如下所示:

    1. @property (weak, nonatomic) IBOutlet UITextField *usernameTextField;
    2. @property (weak, nonatomic) IBOutlet UITextField *passwordTextField;

    其次给第一个textField对象添加点击事件,此时的event选择Did End On Exit,此事件的意思是当用户点击了键盘右下角的按钮时触发此事件,响应的消息命名为next:,此方法的作用是当用户点击了键盘右下角的按钮时,使第二个textField成为第一响应者。

    一个界面中一般只有一个第一响应者。如果UITextField控件变成第一响应者时,键盘会自动弹出,给TextField控件发消息becomeFirstResponder, 就可以让其成为第一响应者身份。next:方法里面的代码如下所示:

     
    1. - (IBAction)next:(UITextField *)sender
    2. {
    3. [self.passwordTextField becomeFirstResponder];
    4. }

    然后给第二个textField对象添加点击事件,此时的event同样选择Did End On Exit,响应的消息命名为done,此方法的作用是当用户点击了键盘右下角的按钮时,使其第一个textField和第二个textField都退出第一响应,代码如下所示:

     
    1. - (IBAction)done
    2. {
    3. [self.usernameTextField resignFirstResponder];
    4. [self.passwordTextField resignFirstResponder];
    5. }

    最后给确定按钮添加点击事件,响应消息命名为submit,此方法的作用是使其用户名输入框和密码输入框全都退出第一响应者,键盘会退出关闭。给TextField控件发消息resignFirstResponder, 就可以让其退出第一响应者身份,submit方法里面的代码如下所示:

     
    1. - (IBAction)submit
    2. {
    3. [self.usernameTextField resignFirstResponder];
    4. [self.passwordTextField resignFirstResponder];
    5. }

    由于退出第一响应者的代码在多个地方用到,因此可以将退出第一响应的代码封装在一个方法resign里面,方便在其他地方调用,因此可以将以上代码进行优化,代码如下所示:

     
    1. - (void)resign
    2. {
    3. [self.usernameTextField resignFirstResponder];
    4. [self.passwordTextField resignFirstResponder];
    5. }
    6. - (IBAction)submit
    7. {
    8. [self resign];
    9. }
    10. - (IBAction)done
    11. {
    12. [self resign];
    13. }

    步骤四:实现点击屏幕背景,退出键盘功能

    在xib中选中view对象,在右边栏的第3个检查器中将view的类型从UIView改成UIControl,如图-28所示:

    图-28

    然后选中view,按住control键,将view接线到代码中,创建方法IBAction,方法的event事件要选择Touch Up Inside,响应消息命名为touchBackground,将退出第一响应的代码在此方法中实现,代码如下所示:

     
    1. - (IBAction)touchBackground
    2. {
    3. [self resign];
    4. }

    5.4 完整代码

    本案例中,TRViewController.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController () <UIAlertViewDelegate>
    3. @property (weak, nonatomic) IBOutlet UITextField *usernameTextField;
    4. @property (weak, nonatomic) IBOutlet UITextField *passwordTextField;
    5. @end
    6. @implementation TRViewController
    7. - (void)resign
    8. {
    9. [self.usernameTextField resignFirstResponder];
    10. [self.passwordTextField resignFirstResponder];
    11. }
    12. - (IBAction)next:(UITextField *)sender
    13. {
    14. [self.passwordTextField becomeFirstResponder];
    15. }
    16. - (IBAction)done
    17. {
    18. [self resign];
    19. }
    20. - (IBAction)submit
    21. {
    22. [self resign];
    23. }
    24. - (IBAction)touchBackground
    25. {
    26. [self resign];
    27. }
    28. @end
     

    6 使用UIAlertView控件给用户提供消息提示,使用委托响应用户的选择

    6.1 问题

    在上一个案例的基础之上添加如下功能:点击确认按钮之后弹出一个alertView对话框,提示用户的登陆信息是否正确,如图-29所示:

    图-29

    6.2 方案

    首先在点击按钮的方法submit里面,创建一个UIAlertView对象,根据是否登陆成功则alertView显示的信息也会有所不同。

    然后向alertView发送show方法,让其在界面弹出。

    最后通过委托模式实现UIAlertViewDelegate的协议方法,实现相应的业务逻辑。

    6.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:在submit方法里创建UIAlertView对象

    首先在submit方法里面获取用户从输入框输入的信息,代码如下所示:

     
    1. NSString *username = self.usernameTextField.text;
    2. NSString *password = self.passwordTextField.text;

    此处暂定正确的用户名为:Daniel,密码为:abc123,然后根据输入信息判断是否登陆成功,根据判断的结果创建不同的UIAlertView对象,使用initWithTitle: message: delegate: cancelButtonTitle:otherButtonTitles:方法进行初始化,当用户名密码正确时,将初始化方法的delegate参数设置为self,否则设置为nil,代码如下所示:

     
    1. if ([username isEqualToString:@"Daniel"] && [password isEqualToString:@"abc123"]) {
    2. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"登录成功" message:@"登录成功,欢迎进入系统" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    3. [alert show];
    4. }else{
    5. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"登录失败" message:@"用户名或密码错误" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    6. [alert show];
    7. }

    当用户输入信息正确时会弹出如图-30所示的对话框:

    图-30

    当用户输入信息错误时则会弹出如图-31所示的对话框:

    图-31

    步骤二:实现alertView的协议方法

    当用户名密码输入正确,点击alertView上的取消按钮时控制台输出“用户取消登陆”,点击alertView上的确认按钮控制台输出“用户登陆成功”,实现此功能需要使用到ios常用的一种设计模式——委托模式。

    此案例中UIAlertView是委托方,同时定义了一个协议UIAlertViewDelegate,上一步中将delegate设置为self,即将viewController设置为了alertView的被委托方,因此viewController类需要遵守UIAlertViewDelegate协议并且实现协议中alertView: clickedButtonAtIndex:的方法即可实现需求,其中clickedButtonAtIndex参数是按钮索引,cancel按钮的索引是0,从左到右依次是1,2……代码如下所示:

     
    1. //遵守UIAlertViewDelegate协议
    2. @interface TRViewController () <UIAlertViewDelegate>
    3. //实现当点击alertView上面的按钮时调用的方法
    4. -(void)alertView:(UIAlertView*)alertView
    5. clickedButtonAtIndex:(NSInteger)buttonIndex
    6. {
    7. if(buttonIndex==0){
    8. NSLog(@"用户取消了登录");
    9. }else if(buttonIndex==1){
    10. NSLog(@"用户登录成功");
    11. }
    12. }

    6.4 完整代码

    本案例中TRViewController.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController () <UIAlertViewDelegate>
    3. @property (weak, nonatomic) IBOutlet UITextField *usernameTextField;
    4. @property (weak, nonatomic) IBOutlet UITextField *passwordTextField;
    5. @end
    6. @implementation TRViewController
    7. - (void)resign
    8. {
    9. [self.usernameTextField resignFirstResponder];
    10. [self.passwordTextField resignFirstResponder];
    11. }
    12. - (IBAction)submit
    13. {
    14. [self resign];
    15. NSString *username = self.usernameTextField.text;
    16. NSString *password = self.passwordTextField.text;
    17. if ([username isEqualToString:@"Daniel"] && [password isEqualToString:@"abc123"]) {
    18. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"登录成功" message:@"登录成功,欢迎进入系统" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    19. [alert show];
    20. }else{
    21. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"登录失败" message:@"用户名或密码错误" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    22. [alert show];
    23. }
    24. }
    25. - (IBAction)touchBackground
    26. {
    27. [self resign];
    28. }
    29. - (IBAction)next:(UITextField *)sender
    30. {
    31. [self.passwordTextField becomeFirstResponder];
    32. }
    33. - (IBAction)done
    34. {
    35. [self submit];
    36. }
    37. -(void)alertView:(UIAlertView*)alertView
    38. clickedButtonAtIndex:(NSInteger)buttonIndex
    39. {
    40. NSLog(@"........index:%d", buttonIndex);
    41. if(buttonIndex==0){
    42. NSLog(@"用户取消了登录");
    43. }else if(buttonIndex==1){
    44. NSLog(@"用户登录成功");
    45. }
    46. }
    47. @end
     

    7 使用UIActionSheet控件完成用户的多种选择,并使用委托响应用户的选择

    7.1 问题

    UIActionSheet是一种类似UIAlertView的对话框控件,与UIAlertView不同的是从界面底部滑出,能给用户提供不同的操作选项,如果操作选项中有一个破坏性操作,将会放在最上面,并且其颜色是红色的,从如图-32所示:

    图-32

    7.2 方案

    首先在界面拖放一个登录按钮,拉线到viewController.m文件里面创建一个方法:loginSuccess。

    然后在loginSuccess方法里面创建一个UIActionSheet对象,根据需求完成各项属性的初始化,并从底部滑出显示在界面上。

    最后通过委托模式实现UIActionSheetDelegate的协议方法,实现相应的业务逻辑。

    7.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:拖放UIButton对象并关联到代码

    从对象库拖放一个UIButton对象到xib界面,并设置button的相关属性,如图-33所示:

    图-33

    将登录按钮拉线到viewController.m文件中,创建方法loginSuccess,自动生成的代码如图-34所示:

    图-34

    步骤二:实现loginSuccess方法创建UIActionSheet对象

    当点击登陆按钮时从界面底部滑出一个UIActionSheet,因此首先在loginSuccess方法里面创建一个UIActionSheet对象sheet,并且使用initWithTitle:delegate: cancelButtonTitle:destructiveButtonTitle:otherButtonTitles:进行初始化,delegate参数此处设置为self,表示将当前viewController对象设置为被委托方,代码如下所示:

     
    1. UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"请选择应用"
    2. delegate:self
    3. cancelButtonTitle:@"取消选择"
    4. destructiveButtonTitle:@"会导致危险的选项"
    5. otherButtonTitles:@"新浪微博",@"腾讯微博",@"微信",@"腾讯QQ",@"QQ音乐",nil];

    然后让sheet从界面底部滑出,此处可以使用showInView方法让sheet从界面底部滑出,实现效果如图-32所示,代码如下所示:

     
    1. [sheet showInView:self.view];

    步骤三:实现UIActionSheetDelegate协议

    此案例中UIActionSheet是委托方,同时定义了一个协议UIActionSheetDelegate,viewController是被委托方,因此viewController需要遵守UIActionSheetDelegate协议并且实现协议中的actionSheet:clickedButtonAtIndex:方法,clickedButtonAtIndex参数同样是按钮索引,代码如下所示:

     
    1. //遵守UIActionSheetDelegate协议
    2. @interface TRViewController ()<UIActionSheetDelegate>
    3. //实现协议中的方法以完成用户需求
    4. -(void)actionSheet:(UIActionSheet*)actionSheet
    5. clickedButtonAtIndex:(NSInteger)buttonIndex
    6. {
    7. NSLog(@"buttonIndex:%d", buttonIndex);
    8. }

    7.4 完整代码

    本案例中TRViewController.m文件中的完整代码如下所示:

     
    1. #import "TRViewController.h"
    2. @interface TRViewController ()<UIActionSheetDelegate>
    3. @end
    4. @implementation TRViewController
    5. -(IBAction)loginSuccess
    6. {
    7. UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"请选择应用"
    8. delegate:self
    9. cancelButtonTitle:@"取消选择"
    10. destructiveButtonTitle:@"会导致危险的选项"
    11. otherButtonTitles:@"新浪微博",@"腾讯微博",@"微信",@"腾讯QQ",@"QQ音乐",nil];
    12. [sheet showInView:self.view];
    13. }
    14. -(void)actionSheet:(UIActionSheet*)actionSheet
    15. clickedButtonAtIndex:(NSInteger)buttonIndex
    16. {
    17. NSLog(@"buttonIndex:%d", buttonIndex);
    18. }
    19. @end
  • 相关阅读:
    封装Web Uploader 上传插件、My97DatePicker、百度 编辑器 的使用 (ASP.NET MVC)
    记一次 Newtonsoft.Json 巧妙的用法(C#)
    使用 ItextSharp HTML生成Pdf(C#)
    go 发布
    Winform 使用DotNetBar 根据菜单加载TabControl
    Winform 使用DotNetBar 设置界面为Office2007 样式
    DataTable 导出到TXT
    (Winform程序带源码) 弹出输入框和获取输入框的值
    C# 返回指定目录下所有文件信息
    Winform 应用DotnetBar
  • 原文地址:https://www.cnblogs.com/52190112cn/p/5049302.html
Copyright © 2020-2023  润新知