起名Silverlight+WCF 新手实例 象棋 WCF通讯基础(十四)

1 使用事件措施参数获取事件源对象

自从此节起来,我们若起WCF通讯了。

1.1 问题

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

起名 1

图- 1

当点击Button时方可转移Label的text,如图-2所显示:

起名 2

图- 2

本游戏的只是冲WCF最基础之采取,没有WCF深奥的知识,相关的深邃知识要关注专业的WCF系列文章。

1.2 方案

先是与之前的案例一样用Xcode创建一个包含xib的项目,在xib上面构建好界面,界面的顶端拖放一个Label和一个Button,然后以人间拖放十单title为0~9的Button,如图-3所示:

起名 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。

咱先来兑现一个Silverlight里调用Hellow的尝试:

1.3 步骤

落实此案例需要以如下步骤进行。

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

各自使用IBOutlet和IBAction将Label和Button与代码关联,关联之后自动生成的代码如图-4,图-5所展示,并且代码前之环为真诚的:

起名 4

图-4

起名 5

图-5

步骤二:实现IBAction方法

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

    • (IBAction)tapButton
  1. {
  2. self.myLabel.text = @”Hello”;
  3. }

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

选取xib中的button1,按停control键,将button1拖拽到TRViewController.m文件被,释放鼠标,会弹来而图-6所出示之窗口:

起名 6

图-6

以弹有窗口里拿动作命名也tap,type选择也UIButton,arguments选呢Sender,表示带参数的法子,此时传递的参数就是深受点击的按钮本身,如图-7所出示:

起名 7

图-7

点击connect按钮,TRViewController.m文件中生成如图-8中之章程,并且这个方法前见面油然而生一个真挚的圈,button1对象点击事件添加成功,如图-8所展示:

起名 8

图-8

然后将button2与这方式关联,按停代码前的热诚圆圈,往xib遭遇之button2拖拽,button2赛显示展示之后自由鼠标,其他几个按钮也相继按照这措施关联,如图-9所显示:

起名 9

图-9

得以上操作下方可查阅是否涉嫌成功,选中button2,点击右键,弹出如图-10窗口,可见里面Touch
Up Inside事件及File‘s
Owner的tap:方法是出于同样漫漫线连接达的,如图-10中之革命框所示,表示该button2和代码关联成功,其他按钮也可仍是道查看。

起名 10

图-10

步骤四:实现tap:方法

该案例中每次点击button0~button9,修改label的text为按钮的title,所以于这办法里,先拿走到给点击按钮的title,然后修改myLabel的text,代码如下所示:

 

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

俺们新建一个初的Silverlight应用程序:文件->新建->项目->Silverlight应用程序->Hellow

1.4 完整代码

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

 

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

建后即一个Hellow应用程序和一个Helow.web的Web应用程序。

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

 

2.1 问题

用UIStepper控件获取用户数据,处理事件。UIStepper控件可以连续长还是减少一个数值,本案例经动用UIStepper控件改变一个label显示的数额,如图-11所显示:

起名 11

图- 11

一样:我们拿WCF集成在Web应用程序中

2.2 方案

首先用Xcode创建一个富含xib的SingleViewApplication项目,从目标库中拖拽一UIStepper控件到xib中构建界面。UIStepper控件的外观是由于少单档次并排的按钮构成,一个来得为“+”,一个来得为“-”,如图-12所出示:

起名 12

图- 12

附带选中stepper,在右边边栏的季只检查器里面安装各个控件的相关属性。

其三以每控件关联成viewController的村办属性(IBOutlet)或者个体方法(IBAction)。

说到底当viewController.m文件中因故代码实现相应的需要逻辑。

俺们对在Web应用程序右键-》添加->新建起->WCF服务-》起名:Service.svc

2.3 步骤

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

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

动Xcode创建一个涵盖xib的SingleViewApplication项目,从目标库中拖拽一个UILabel控件和UIStepper控件到xib中,将label的text设置为0,如图-13所出示:

起名 13

图-13

手续二:设置属性

入选stepper,在右手边栏的季独检查器里面装stepper的号性能,value表示即价,stepValue表示步进值,minimumValue表示极度小值,maximumValue表示极度特别价值,如图-14所著:

起名 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

图-15

手续四:实现方式

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

 

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

转车后,默认生成IService.cs接口和Service.svc/Service.svc.cs文件

2.4 完整代码

本案例中,TRViewController.m文件被之共同体代码如下所示:

 

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

我们看一下自动生成的代码:

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

 [ServiceContract]
    public interface IService
    {
        [OperationContract]
        void DoWork();

3.1 问题

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

起名 16

图- 16

        [OperationContract]
        string SayHello(string name);//这个是自家加的
    }

3.2 方案

直白在直达一个案例的基础及构建界面,从目标库中拖拽一个UISlider控件到xib中构建界面,如图-17所出示:

起名 17

图- 17

副选中相应控件,在右边栏的季只检查器里面装各个控件的连锁属性。

其三将各控件关联成viewController的村办属性(IBOutlet)或者个体方法(IBAction)。

说到底以viewController.m文件被之所以代码实现相应的求逻辑。

 

3.3 步骤

兑现此案例需要遵循如下步骤进行。

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

每当达成一个案例的根底及,首先由目标库中拖拽两独UILabel控件和UISlider控件到xib中,然后以右侧边的季个检查器设置两单label对象的显得内容和背景颜色,如图-18所著:

起名 18

图-18

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

选中UISlider对象,在右手边的季独检查器设置slider的个性能,value代表即值,minimumValue表示最小价,maximumValue表示极度充分价值,本案例将最小值设置为0,最要命价值设置也1,当前值设置为0,如图-19所显示:

起名 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:方法中之代码如下所示:

 

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

扣押下代码分析:

3.4 完整代码

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

 

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

接口标识:[ServiceContract],

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

接口头顶上基本上矣一个特色,翻译一下就是叫“服务契约”,当初刚好看WCF的webcast时,一听契约,迷糊了,这名字吧扩鬼义了。

4.1 问题

以UISwitch控件获取用户数量,处理事件。UISwitch开关控件类似于windows中之复选框,只生零星栽状态YES和NO,由属性on来支配,本案例实现点击一个开关能够以决定两独开关的状态,如图-20所出示:

起名 20

图- 20

措施名标识:[OperationContract]

4.2 方案

直在达标一个案例的基本功及构建界面,从目标库中拖拽一个UISwitch控件到xib中构建界面,如图-21所展示:

起名 21

图- 21

从将每控件关联成viewController的村办属性(IBOutlet)或者个人方法(IBAction)。

终极以viewController.m文件被之所以代码实现相应的求逻辑。

 

4.3 步骤

落实此案例需要以如下步骤进行。

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

在上一个案例之功底及,首先由目标库中拖拽两单UISwitch控件到xib中,如图-22所著:

起名 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来决定,代码如下所示:

 

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

事实上就算是一些特色,用于微软内反射的一个标识,看见不同名目干点不同之转业。

4.4 完整代码

该案例中,TRViewController.m文件中之共同体代码如下所示:

 

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

自然矣,除了接口,方法,还有实体类,和成员标识:

5 使用UITextField实现一个简单易行的报到界面

实体类契约:[DataContract]–有点神奇的凡,我刚发现自之实体类里有一个遗忘了写是,竟然也直接成功的运作到今日。

5.1 问题

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

起名 23

图-23

该案例实现一个简短的用户登录界面,在textField进入编辑状态时,键盘会从人间滑发生,当点击确定按钮和屏幕时会脱离关闭键盘,如图-24所著:

起名 24

图- 24

属性:[DataMember]

5.2 方案

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

其次设置textField的相干属性。

然后拿xib中之UITextField对象与UIButton对象与代码关联。

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

起名 25起名 26

5.3 步骤

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

步骤一样:构建界面

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

起名 27

图-25

步骤二:设置textField的属性

从选中第一独textField对象,在右手边栏的季个检查器里装相关属性,在Placeholder属性中输入username,用来唤起用户输入的音讯,第二独textField对象的Placeholder属性设置也password,如图-26,图-27所出示:

起名 28

图-26

起名 29

图-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:方法中的代码如下所示:

 

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

下一场被老二独textField对象上加点击事件,此时之event同样选择Did
End On
Exit,响应的消息命名吧done,此道的打算是当用户点击了键盘右下角的按钮时,使该首先单textField和第二单textField都脱第一应,代码如下所示:

 

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

末尾吃确定按钮上加点击事件,响应消息命名吧submit,此方法的打算是要该用户称输入框和密码输入框全都退出第一响应者,键盘会退出关闭。给TextField控件发消息resignFirstResponder,
就可被其退出第一响应者身份,submit方法中的代码如下所示:

 

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

出于离第一响应者的代码在差不多个地方采取,因此可以以退第一响应的代码封装于一个术resign里面,方便在旁地方调用,因此可将上述代码进行优化,代码如下所示:

 

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

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

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

起名 30

图-28

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

 

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

    /// <summary>
    /// 游戏玩家
    /// </summary>
    [DataContract]
    public class Player
    {
        /// <summary>
        /// 玩家ID
        /// </summary>
        [DataMember]
        public Guid ID
        {
            get;
            set;
        }
    }

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
    • (void)resign
  7. {
  8. [self.usernameTextField resignFirstResponder];
  9. [self.passwordTextField resignFirstResponder];
  10. }
    • (IBAction)next:(UITextField *)sender
  11. {
  12. [self.passwordTextField becomeFirstResponder];
  13. }
    • (IBAction)done
  14. {
  15. [self resign];
  16. }
    • (IBAction)submit
  17. {
  18. [self resign];
  19. }
    • (IBAction)touchBackground
  20. {
  21. [self resign];
  22. }
  23. @end 

 

6 利用UIAlertView控件给用户提供信息提示,使用委托响应用户的挑选

OK,现在咱们回去实现地方我新加的老SayHello接口方法,其实就是是回“Hello:加名字“;

6.1 问题

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

起名 31

图-29

起名 32起名 33

6.2 方案

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

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

说到底经过委托模式实现UIAlertViewDelegate的商谈方式,实现相应的工作逻辑。

 public class Service : IService
    {
        public void DoWork()
        {

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所显示之对话框:

起名 34

图-30

当用户输入信息错误时虽然会弹来而图-31所出示之对话框:

起名 35

图-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”
    1. @interface TRViewController ()
      <UIAlertViewDelegate>
  2. @property (weak, nonatomic) IBOutlet UITextField *usernameTextField;
  3. @property (weak, nonatomic) IBOutlet UITextField *passwordTextField;
  4. @end
    1. @implementation
      TRViewController
      • (void)resign
  5. {
  6. [self.usernameTextField resignFirstResponder];
  7. [self.passwordTextField resignFirstResponder];
  8. }
      • (IBAction)submit
  9. {
  10. [self resign];
  11. NSString *username = self.usernameTextField.text;
  12. NSString *password = self.passwordTextField.text;
  13. if ([username isEqualToString:@”Daniel”] && [password
    isEqualToString:@”abc123″]) {
  14. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@”登录成功” message:@”登录成功,欢迎进入系统” delegate:self cancelButtonTitle:@”取消” otherButtonTitles:@”确定”, nil];
  15. [alert show];
  16. }else{
  17. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@”登录失败” message:@”用户称或密码错误” delegate:nil cancelButtonTitle:@”确定” otherButtonTitles:nil];
  18. [alert show];
  19. }
  20. }
    • (IBAction)touchBackground
  21. {
  22. [self resign];
  23. }
    • (IBAction)next:(UITextField *)sender
  24. {
  25. [self.passwordTextField becomeFirstResponder];
  26. }
    • (IBAction)done
  27. {
  28. [self submit];
  29. }
    1. -(void)alertView:(UIAlertView*)alertView
  30. clickedButtonAtIndex:(NSInteger)buttonIndex

  31. {
  32. NSLog(@”……..index:%d”, buttonIndex);
  33. if(buttonIndex==0){
  34. NSLog(@”用户取消了登录”);
  35. }else if(buttonIndex==1){
  36. NSLog(@”用户登录成功”);
  37. }
    1. }
  38. @end 

        #region IService 成员

7 用UIActionSheet控件完成用户之有余精选,并动用委托响应用户的挑

        public string SayHello(string name)
        {
            return “Hello:” + name;
        }

7.1 问题

UIActionSheet是同栽恍若UIAlertView的对话框控件,与UIAlertView不同的是打界面底部滑发生,能吃用户提供不同的操作选项,如果操作选项中生出一个破坏性操作,将会在最上面,并且该颜色是辛亥革命的,从如图-32所展示:

起名 36

图-32

        #endregion
    }

7.2 方案

第一在界面拖放一个记名按钮,拉线到viewController.m文件里创建一个法:loginSuccess。

然后以loginSuccess方法中创建一个UIActionSheet对象,根据需求就各项性能之初始化,并由脚滑发生显示在界面及。

说到底经过委托模式实现UIActionSheetDelegate的商事方式,实现相应的政工逻辑。

 

7.3 步骤

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

步骤同:拖放UIButton对象并提到到代码

起目标库拖放一个UIButton对象及xib界面,并安装button的相关属性,如图-33所出示:

起名 37

图-33

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

起名 38

图-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. }

好了,WCF的代码到是即描写了了,和webservice差不多吧,既然差不多,那就是因故以及webservice一样,我们交Silverlight应用程序中引用这WCF。

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. }
    1. -(void)actionSheet:(UIActionSheet*)actionSheet
  14. clickedButtonAtIndex:(NSInteger)buttonIndex
  15. {
  16. NSLog(@”buttonIndex:%d”, buttonIndex);
  17. }
    1. @end

本着正在Silverlight的“引用”右键-》添加服务引用-》出来对话框后点”发现(D)”:

起名 39

更触及一下不胜Service。svc,出来看见异常Service和IService就证明是了。

就我们改变下命名空间,改化HellowService。

肯定之后,自动生成Service
References文件夹和ServiceReferences.ClientConfig文件。

起名 40

接通下去,我们而开始调用WCF的措施了。

归来Silverlight应用程序的MainPage里,拉入一个TextBox,一个TextBlock,一个button

 

起名 41起名 42

<Grid x:Name=”LayoutRoot” Background=”White”>
        <Button Content=”WCF 调用” Height=”23″ HorizontalAlignment=”Left” Margin=”84,111,0,0″ Name=”btnCallWCF” VerticalAlignment=”Top” Width=”75″ Click=”btnCallWCF_Click” />
        <TextBox Height=”23″ HorizontalAlignment=”Left” Margin=”84,71,0,0″ Name=”txtName” VerticalAlignment=”Top” Width=”120″ />
        <TextBlock Height=”23″ HorizontalAlignment=”Left” Margin=”228,71,0,0″ Name=”tbMsg” Text=”显示的情节” VerticalAlignment=”Top” />
    </Grid>

 

反了几个Name之后,双击Button进去事件。敲入以下代码:

起名 43起名 44

private void btnCallWCF_Click(object sender, RoutedEventArgs e)
        {
            Binding binding = new BasicHttpBinding();
            EndpointAddress endPoint = new EndpointAddress(“http://localhost:12345/Service.svc”);
            HellowService.ServiceClient client = new HellowService.ServiceClient(binding, endPoint);
            client.SayHelloCompleted += new EventHandler<HellowService.SayHelloCompletedEventArgs>(client_SayHelloCompleted);
            client.SayHelloAsync(txtName.Text);
        }

        void client_SayHelloCompleted(object sender, HellowService.SayHelloCompletedEventArgs e)
        {
            tbMsg.Text = e.Result;
        }

 

此地说一下:

先是执行:Binding binding =new BasicHttpBinding();
–》绑定通讯方式,这里是BasicHttp方式,基础之http请求方式。像这同样看似的措施产生N种,10栽左右。说明微软的支撑是一定的劲的。

第二行:EndpointAddress endPoint = new
EndpointAddress(“http://localhost:12345/Service.svc”);–》指定SVC的途径,要不然找不顶路调用了。这里我们所以了一定端口12345。

设要一定端口,这里要配备一下Hellow.Web项目之性:

起名 45

下一场打开ServiceReferences.ClientConfig,把特定端口号也转化12345。

老三尽:调用方法好后底回调事件

季实行,异步调用SayHello方法。

证实:所有WCF的艺术调用都是异步的,所以总是伴随有回调函数。

对WCF,用的卓绝多的即是事件及信托了,这有限点未熟悉的大伙子们,要赶快补课啦。

万事就绪,F5运作,出来如下窗口:

起名 46

输入名称:路过秋天,点击调用,正常回来消息了。

起名 47

证,第一步的WCF调用已经打响了。

 大伙在试的时如果悠着点,不然可怜易就涌出各式各样的题目

下节咱们提将WCF独立出来一个种类,不在Hellow.Web上,由于单独出来,所以会用另外一个端口,

对此端口不同来的跨域问题,也顺手解决。

此处提供源下载:点击下载

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图