zoukankan      html  css  js  c++  java
  • 标签栏和选取器

    用Storyboard做的。做点记录

    总的效果:

    总的结构:

    视图结构:

    新建一个Tabbed Application

    PS:我直接建Single View Application,然后删除里面的ViewController类文件和Storyboard中默认的控制器视图,自己添加Tab Bar Controller 控件

    新建一个UITabBarController类的文件(.h,.m);PS:在本次学习内容中,对UITabBarController类文件没有修改。

    Tab Bar Controller控件关联到UITabBarController实例。

    分别添加标签栏中标签所对应的控制器控件(本次用到5个View Controller控件),分别关联到对应的控制器实例;

    运行起来能看到有5个标签的标签栏。

    总的粗糙的视图已经搭好。

    ========================================================================

    接下来是对每个标签栏对应的视图控制器进行编辑。

    提几点:

    1、选取器(Picker)需要选取器委托(picker delegate)和选取器数据源(picker data source)。

    本次学习内容指定对应的视图控制器为 选取器委托 和 选取器数据源。

    2、在视图控制器文件中使用协议(Protocol)

    .h

     1 #import <UIKit/UIKit.h>
     2 
     3 @interface SingleComponentPickersViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> // Protocol
     4 
     5 @property (strong, nonatomic) IBOutlet UIPickerView *singlePicker;
     6 @property (strong, nonatomic) NSArray *pickerData;
     7 
     8 - (IBAction)buttonPressed;
     9 
    10 @end

    .m

     1 #pragma mark -
     2 #pragma mark Picker Data Source Methonds
     3 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
     4 {
     5     return 1;
     6 }
     7 
     8 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
     9 {
    10     return [self.pickerData count];
    11 }
    12 
    13 #pragma mark Picker Delegate Methods
    14 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
    15 {
    16     return [self.pickerData objectAtIndex:row];
    17 }
    18 
    19 @end

    3、在- (void)viewDidLoad方法中加载用于选取器中显示的数据

    1 - (void)viewDidLoad
    2 {
    3     [super viewDidLoad];
    4     // Do any additional setup after loading the view.
    5     NSArray *array = [[NSArray alloc] initWithObjects:@"Luke", @"Leia", @"Han", @"Chewbacca", @"Artoo", @"Threepio", @"Lando",nil];
    6     self.pickerData = array;
    7 }

    4、对多组件宽度的控制

     1 #pragma mark -
     2 #pragma mark Picker Data Source Methonds
     3 ....
     4 
     5 #pragma mark Picker Delegate Methods
     6 ...
     7 
     8 // set the width of the component
     9 - (CGFloat)pickerView:(UIPickerView *)pickerView 
    10     widthForComponent:(NSInteger)component
    11 {
    12     if (component == kZipComponent)
    13         return 90;
    14     return 200;
    15 }

    5、实现依赖组件 (DependentComponentPickersViewController )中,选取器的数据是从资源文件statedictionary.plist中获得,那么这里用到“束”(NSBundle)。NSBundle的一个重要作用是获取添加到项目的Resources文件夹(在Xcode中已经没有这个文件夹,自己可以新建Group文件夹)的资源。在构建应用程序时,这些文件被复制到应用程序中。

    通过主束获取需要的资源。

     1 - (void)viewDidLoad
     2 {
     3     [super viewDidLoad];
     4     // Do any additional setup after loading the view.
     5     
     6     NSBundle *bundle = [NSBundle mainBundle];   // use the resources in the project via Bundle
     7     NSString *plistPath = [bundle pathForResource:@"statedictionary" ofType:@"plist"];
     8     
     9     NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    10     self.stateZips = dictionary;
    11     
    12     NSArray *components = [self.stateZips allKeys];
    13     NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
    14     self.states = sorted;
    15     
    16     NSString *selectedState = [self.states objectAtIndex:0];
    17     NSArray *array = [self.stateZips objectForKey:selectedState];
    18     self.zips = array;
    19 }

    6、添加图像到选取器组件中

     1 - (void)viewDidLoad
     2 {
     3     [super viewDidLoad];
     4     // Do any additional setup after loading the view.
     5     
     6     UIImage *seven = [UIImage imageNamed:@"seven.png"];
     7     UIImage *bar = [UIImage imageNamed:@"bar.png"];
     8     UIImage *crown = [UIImage imageNamed:@"crown.png"];
     9     UIImage *cherry = [UIImage imageNamed:@"cherry.png"];
    10     UIImage *lemon = [UIImage imageNamed:@"lemon.png"];
    11     UIImage *apple = [UIImage imageNamed:@"apple.png"];
    12     
    13     for (int i = 1; i <= 5; i++)
    14     {
    15         UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];
    16         UIImageView *barView = [[UIImageView alloc] initWithImage:bar];
    17         UIImageView *crownView = [[UIImageView alloc] initWithImage:crown];
    18         UIImageView *cherryView = [[UIImageView alloc] initWithImage:cherry];
    19         UIImageView *lemonView = [[UIImageView alloc] initWithImage:lemon];
    20         UIImageView *appleView = [[UIImageView alloc] initWithImage:apple];
    21         NSArray *imageViewArray = [[NSArray alloc] initWithObjects:sevenView, barView, crownView, cherryView, lemonView, appleView, nil];
    22         
    23         NSString *fileName = [[NSString alloc] initWithFormat:@"column%d", i];
    24         [self setValue:imageViewArray forKey:fileName];
    25     }
    26     
    27     srandom(time(NULL));
    28 }

    7、使用声音。

    .h

    1 @property (nonatomic) SystemSoundID crunchSoundID;  // 持有相应的声音
    2 @property (nonatomic) SystemSoundID winSoundID;

    .m

     1 // load the sound
     2 - (void)viewDidLoad
     3 {
     4     [super viewDidLoad];
     5     // Do any additional setup after loading the view.
     6     ...
     7     NSString *path = [[NSBundle mainBundle] pathForResource:@"win" ofType:@"wav"];
     8     AudioServicesCreateSystemSoundID((__bridge  CFURLRef)[NSURL fileURLWithPath:path], &winSoundID);
     9     
    10     path = [[NSBundle mainBundle] pathForResource:@"crunch" ofType:@"wav"];
    11     AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &crunchSoundID);
    12     
    13     ...
    14 }
    15 
    16 // hidden the button after click the it
    17 - (void)showButton
    18 {
    19     self.button.hidden = NO;
    20 }
    21 
    22 - (void)playWinSound
    23 {
    24     AudioServicesPlaySystemSound(self.winSoundID);
    25     self.winLabel.text = @"WIN!";
    26     [self performSelector:@selector(showButton) withObject:nil afterDelay:1.5];
    27 }
    28 
    29 // Button控件触发的事件
    30 - (IBAction)spin 
    31 {
    32     ...
    33     
    34     if (win)
    35         [self performSelector:@selector(playWinSound)
    36                         withObject:nil
    37                         afterDelay:.5];
    38     else
    39         [self performSelector:@selector(showButton)
    40                         withObject:nil
    41                         afterDelay:.5];
    42     
    43  }

    链接 Audio Toolbox 框架


    /**************************************************************************
                      原文来自博客园——Submarinex的博客: www.cnblogs.com/submarinex/               
      *************************************************************************/

  • 相关阅读:
    C#获取当前程序运行路径的方法集合
    SQL为查询的结果加上序号(ROW_NUMBER) 合并多个查询结果
    Asp.net导出excel时长数字被科学计数法的解决方案。(身份证长数字作为字符处理)
    Stopwatch的用法
    对web.config的ConnectionString加密
    如何检索数据库中的空值和null
    如何将闲置的平板作为第二显示器(分屏)使用
    pyinstaller 打包文件太大
    如何让openssl生成的SSL证书被浏览器认可
    还是那该死的IE~~~
  • 原文地址:https://www.cnblogs.com/submarinex/p/2596650.html
Copyright © 2011-2022 走看看