用户界面的设计

来源:互联网 发布:勒索软件即服务 编辑:程序博客网 时间:2024/06/06 00:21


#import <UIKit/UIKit.h>


@interface AppDelegate :UIResponder <UIApplicationDelegate>


@property (strong,nonatomic) UIWindow *window;



@end








#import "ViewController.h"



/*        

 一、storyboard操作方法:

                       1Name Field名称字段)要发送的事件: Did End On Exit:用户点击return或者done按钮。然后将它连接到 ViewController

                       2Number Field号码字段)要发送的事件:一个区域内的touchdown事件。然后将它连接到 ViewController

                       3Horizontal Slider水平滑动条)要发送的事件:Value Changed:一个点击拖拽或者操作一个区域,产生一系列的值。

                       4Slider Label滑动条的标签)要发送的事件:连接到 ViewVontroller上。

                       5Switch,Button (分段控件 )要发送的事件:Value Changed:一个点击拖拽或者操作一个区域,产生一系列的值

                       6Right Switch右边开关按钮)要发送的事件:Value Changed:一个点击拖拽或者操作一个区域,产生一系列的值。然后将它连接到 ViewController

                       7Do Something Button (显示操作表单的按钮 )要发送的事件:Touch Up Inside:手指在区域内触发的touchup事件。然后将它连接到 ViewController

                       8Lefts Switch左边开关按钮)要发送的事件:Value Changed:一个点击拖拽或者操作一个区域,产生一系列的值。然后将它连接到 ViewController


二、下图是视图控制器中用到的约束:







                                        Outlets里面显示的是你的属性, 以及连接着的目标.
Referencing Outlets是你被连接到了别人的属性上面.

比如UITableViewController的view属性连到UITableView上面, 在UITableViewController看来UITableView是它的Outlets, 反之则是Referencing Outlets.

同时UITableView的delegate属性又连到UITableViewController上面. 则此时在UITableView看来UITableViewController就成了它的Outlets了.






*/






@interface ViewController ()

//两个文本框的属性

@property (weak,nonatomic) IBOutletUITextField *nameField;

@property (weak,nonatomic) IBOutletUITextField *numberField;


//滑动条数值的属性

@property (weak,nonatomic) IBOutletUILabel *sliderLabel;

//左边开关的属性

@property (weak,nonatomic) IBOutletUISwitch *leftSWitch;

//右边的开关的属性

@property (weak,nonatomic) IBOutletUISwitch *rightSwitch;

//加载图片的按钮

@property (weak,nonatomic) IBOutletUIButton *doSomethingButton;


@end


@implementation ViewController

//按下 Done退出   Name Number两个触发事件都连接到这上面)

- (IBAction)textFieldDoneEditing:(id)sender {

    [ sender resignFirstResponder];

}


//触摸背景退出

-(IBAction)backgroundTap:(id)sender {

    [self.nameFieldresignFirstResponder];

    [self.numberFieldresignFirstResponder];

}


//一个点击拖拽或者操作一个区域,产生一系列的值滑动条的值)

- (IBAction)sliderChanged:(UISlider *)sender {

    //lround 函数将返回最接近int到整数x中间值将舍入远离零,浮点舍入模式的设置无关。无错误返回    将舍入为最接近整数的浮点值

   int progress = (int)lroundf(sender.value);

    //将滑动条文本的值设置为100

   self.sliderLabel.text = [NSStringstringWithFormat:@"%d", progress];

}


//Right Switch 开关控件的实现

- (IBAction)swithChanged:(UISwitch *)sender {

    //让两个开关同步( isOnUISwitch类里面的一个属性,BOOL setting=sender.isOn;是将senderisOn的值赋给setting

   BOOL setting = sender.isOn;

    [self.leftSWitchsetOn:setting animated:YES];

    [self.rightSwitchsetOn:setting animated:YES];

}


//分段控件的实现

- (IBAction)toggleControls:(UISegmentedControl *)sender {

    // 0 == switches idex开关的指标

    if (sender.selectedSegmentIndex ==0) //selectedSegmentIndex选取部分的指标

    {

        //如果是 Switch的话显示开关控件,隐藏图片按钮

       self.leftSWitch.hidden =NO;

       self.rightSwitch.hidden =NO;

        self.doSomethingButton.hidden = YES;

    }else{

        //否则就显示图片按钮,隐藏开关按钮

       self.leftSWitch.hidden =YES;

       self.rightSwitch.hidden =YES;

        self.doSomethingButton.hidden = NO;

    }


}

//按下按钮触发一系列事情 显示操作表单

- (IBAction)buttonPressed:(UIButton *)sender {

    // doSomething操作方法中分配了一个 UIAlertController对象并进行初始化。这个初始化方法接受多个参数;第一个参数是要显示的标题,这里提供的标题将显示在操作表单的顶部。第二个参数是显示在标题下面的信息,字体小一些。我们不打算在这个示例中使用信息,因此我们在这个参数处填上 nil,最后一个参数表示我们希望让视图控制器显示一下警告视图还是控制视图想要显示警告视图的话UIAlertControllerStyleAlert显示操作表单 UIAlertControllerStyleActionSheet

   UIAlertController * controller =

    [UIAlertControlleralertControllerWithTitle:@"Are You Sure?"message:nilpreferredStyle:UIAlertControllerStyleActionSheet];

    // 在用户按下 "Yes,I'm Sure!"按钮时,我们想弹出一个带文字的警告。当添加到警告控制器的按钮被按下时,操作表单(或警告视图)会关闭,而且会基于创建按钮的 UIAlertAction调用处理代码块。 警告控制器默认不提供任何按钮,我们必须为每个添加到控制器中的按钮创建一个 UIAllerAction对象

    UIAlertAction * yesAction = [UIAlertActionactionWithTitle:@"Yes,I'm Sure!"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction * action){

        //创建一个新的字符串

       NSString * msg;

        //如果在姓名的文本框里面键入了姓名,就获取这个值,并且在警告视图的信息中使用它

       if ([self.nameField.textlength] > 0){

            msg = [NSStringstringWithFormat:@"You can breathe easy.%@, everything went Ok.",self.nameField.text];

        }else//否则,只显示一条普通的信息

        {

            msg = @"You cam breathe easy, everything went Ok.";

        }

        //显示警告视图弹出窗口的标题

        UIAlertController * controller2 = [UIAlertControlleralertControllerWithTitle:@"Something Was Done"message:msg preferredStyle:UIAlertControllerStyleAlert];

        //取消警告视图窗口的显示

        UIAlertAction * cancelAction = [UIAlertActionactionWithTitle:@"Phew!"style:UIAlertActionStyleCancelhandler:nil];

        [controller2addAction:cancelAction];

        //返回controller2

        [selfpresentViewController:controller2animated:YEScompletion:nil];

    }];

    

    

    

    

    UIAlertAction * noAction = [UIAlertActionactionWithTitle:@"No way!"style:UIAlertActionStyleCancelhandler:nil];

    //向控制器添加两个按钮

    [controlleraddAction:yesAction];

    [controlleraddAction:noAction];

    

    //展示操作表单。 为了让警告视图或操作表单显示出来,需要让当前视图控制器来展示警告视图控制器

    UIPopoverPresentationController * ppc = controller.popoverPresentationController;

   if (ppc != nil) {

        //通过获取到警告控制器的悬浮展示控制器,并设置它的 sourceView sourceRect属性来设定操作表单会出现的位置。  sourceView属性指向那个按钮 sourceRect属性为按钮的外型

        ppc.sourceView = sender;

        ppc.sourceRect = sender.bounds;

    }

    //将警告控制器作为展示的控制器以显示操作表单。  在展示视图控制器时,被展示的视图会暂时取代展示它的视图控制器的视图。)

    [selfpresentViewController:controlleranimated:YEScompletion:nil];

    //对于警告控制器,操作表单或警告视图会部分覆盖展示它们的视图控制器的视图,而视图的剩余部分会被阴影覆盖,半透明的背景可以让你看到底层视图,并提醒你无法与之交互,除非你关闭了展示的视图控制器

}










- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}



- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end








原创粉丝点击