2KB项目,专业的源码交易网站 帮助 收藏 每日签到

你的第一个 iOS 应用程序: 100% 的编程方式

  • 时间:2019-01-23 18:44 编辑:2KB 来源:2KB.COM 阅读:443
  • 扫一扫,手机访问
  • 分享
摘要:
iOS 英文原文:Your First iOS App: 100% Programmatically

我为不想使用故事板和 Interface Builder 的 iOS 开发者创建了这个教程。它使用了纯代码的方式实现了完整的苹果文档中的 “Hello World”。

image

在苹果的文档中:

当你运行时,在文本框中点击会显示一个系统提供的软键盘。输入您的名字,点击“Done”键关闭软键盘后,点击 Hello 按钮将看到在文本框和按钮之间的文本标签显示 “Hello, Your Name!“ 。

首先, 打开 Xcode 点击 “Create a new Xcode project” 。这里我的 Xcode 版本为 4.6。

image

使用 Empty Application 模版。

image

填写其余字段。 确保 “Use Automatic Reference Counting” 与 “Include Unit Tests” 已选中。 本教程中不使用 Core Data 。

image

就算我们选择了 “Empty Application” 模版, Xcode 仍然创建了一些默认的文件。 点击左边的文件浏览器中的 AppDelegate.m 打开此文件。

image

App Delegate 文件用于您的应用与操作系统沟通,它包括一些常用的方法。

我们将主要处理 “application didFinishLaunchingWithOptions” ,它将在应用启动后调用。

如果你现在点击顶部左侧的 Run 按钮,你的应用将是一个空白屏幕。

image

您可能已经注意到一个警告:

"Application windows are expected to have a root view controller at the end of application launch".

不要担心, 我们马上会设置它,但是首先我们要创建一个 ViewController 类。点击 File, New, File…

image

在 Cocoa Touch 分类中选择 Objective-C class 并点击 Next 。

image

您可以自己选择一个用于您的类的名称,但确保在下面的子类设置中为 UIViewController 。 我为我的类命名为 “MainViewController”。 UIViewController 是一个 iOS 的基本类,它用于处理用户界面的相互影响。点击 Next 再点 Create。

image

您现在应该有包括基本代码的 MainViewController.m 与 MainViewController.h 文件,我们稍后来处理它们 - 先回到 AppDelegate.m 文件。

首先,确保你在文件头中导入了您的 MainViewController 类:

#import "AppDelegate.h"
#import "MainViewController.h"
接下来,看看 “application didFinishLaunching” 方法 - 它应该包含一些默认的匹配下面的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] 
initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
这里就是我们设置 “root view controller” 属性 - 或在应用启动后要显示的视图的地方。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] 
    initWithFrame:[[UIScreen mainScreen] bounds]];
    
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    /*  
        创建我们的视图控制器并设置它为窗口根视图控制器
    */
    MainViewController *viewController = 
    [[MainViewController alloc] init];
    
    self.window.rootViewController = viewController;
    
    [self.window makeKeyAndVisible];
    return YES;
}
再次运行还是会看到一个空白屏幕,但是这一次警告消失了。在本教程的下一部分,我们将处理屏幕元素。

下一步是添加元素到用户界面 - 一个文件框,一个按钮和一个标签。

1. 文件框

回到您的 MainViewController.m 文件。 与 app delegate 类似, 这里包括了 UIViewController 类的处理生命周期中不同位置的帮助方法。

首先我们需要为文本框与标签创建类属性。 创建一个属性允许在类中任意位置访问对象实例,而不是只在一个函数范围内。 我们需要用它来将文本框的内容设置到标签上。

私有属性可以在 MainViewController.m 文件的下面块内定义。

@interface MainViewController()
@end

所以我们可以添加下面的行:

@interface MainViewController()

@property (nonatomic, strong) UITextField *textField;
@property (nonatomic, strong) UILabel *label;

@end
您也许不太清楚 “nonatomic, strong” 的含义 - 简单的说它是用于内存管理。您可以   查看这里了解更多 

现在找到 “viewDidLoad” 方法,它将在视图创建并加载到屏幕后执行 - 现在您应该看到如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
现在创建文本框。使用 "self." 前缀引用我们之前创建的属性。
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    // 创建文本框并设置位置与大小
    self.textField = [[UITextField alloc]
                              initWithFrame:
                              CGRectMake(10.0f, 30.0f, 
                              300.0f, 30.0f)];
    
    // 改变文本框的边框样式让文本框可见
    self.textField.borderStyle = UITextBorderStyleRoundedRect;
    
    /*
      将文本框添加到主视图。
      注意:UITextField 和其它一些 UI 类都是 UIView 的子类,这意味着它们可以添加到视图层次
    */
    [self.view addSubview:self.textField];
    
}
如果您现在运行,应该可以看到在屏幕顶部显示了一个文本框。点击它将自动显示一个软键盘,我们还需要添加一些代码手动关闭软键盘。

关键在 UITextField 的委托方法 “delegate method” 。 委托方法就像是为你的应用程序中的对象的辅助功能,有时可以帮助两个类之间的数据传递。 我们一般用于关闭软键盘的委托方法名为 “textFieldShouldReturn” , 它将在每次用户点击软键盘上的 “return” 按钮时调用。

有关委托方法的官方文档。您可以在 UITextFieldDelegate reference article 中查找“textFieldShouldReturn” 方法。

在 viewDidLoad 方法之后添加:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

} 
使用下面的代码关闭文本框的软键盘:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
   // 告诉操作系统移除前置的软键盘
   [textField resignFirstResponder];

   //returns NO. 加入一个换行字符
   //文本框忽略
   return NO;
}
让它工作我们还需要一些工作。回到 viewDidLoad 方法我们创建文本框的位置。在 alloc 与 init 的下一行加入:
self.textField.delegate = self;
这告诉应用执行当前类中的委托方法。

最后一件事是更新 MainViewController.h file. In the .h 文件, 找到下面这行:

@interface MainViewController : UIViewController

更改它为:

@interface MainViewController : UIViewController <UITextFieldDelegate>

这指明 MainViewController 实现了 UITextField 的委托方法。 现在运行 - 点击"return"按钮可以关闭软键盘了。

2. 按钮

我们将在 viewDidLoad 方法中同样的创建标签。 从这行之后

[self.view addSubview:self.textField]; 

您可以与初始化文本框类似的方式(使用 alloc, initWithFrame 方法)初始化按钮,但因为我们只需要使用一个默认的按钮,所以这里我们对它有一些不同的处理。

// 初始化一个圆角样式的默认按钮
UIButton *button = 
    [UIButton buttonWithType:UIButtonTypeRoundedRect];

// 设置按钮的位置与大小
button.frame = CGRectMake(110.0f, 200.0f, 100.0f, 30.0f);

// 设置目标,行为与控件事件。
// 更多说明看后文
[button addTarget:self 
           action:@selector(buttonPressed) 
 forControlEvents:UIControlEventTouchUpInside];

// 设置标题
[button setTitle:@"Press Me!" forState:UIControlStateNormal];

// 将按钮添加到主视图
[self.view addSubview:button];
这需要照顾的大部分按钮的属性。 addTarget, action, forControlEvents 方法允许你定义一个在按钮按下后需要调用的函数。 target 用于接受动作消息的对象 - 在这里,按钮按下后与您调用下面的代码相同的效果:
[self buttonPressed]; 

使用 @selector() 块定义一个要在按钮按下时调用的函数名称 - 我们仍然需要实现它。

control event 指定动作消息发出的条件,苹果定义的 “UIControlEventTouchUpInside” 是最通常的点击。

现在我们可以创建一个空壳的 buttonPressed 函数。在创建好标签后我们再来添加实现。

在 viewDidLoad 与 textFieldShouldReturn 之间创建 buttonPressed 方法:

- (void)buttonPressed { }

我们在创建好标签后再回来。

3. 标签

我将最简单的留到最后。我们将按下面的方式创建标签

[self.view addSubview:button]

label 的初始化和 textfield 非常类似,只需要三行:

self.label = [[UILabel alloc] 
    initWithFrame:CGRectMake(115.0f, 150.0f, 200.0f, 30.0f)];
self.label.text = @"Hello World!";
[self.view addSubview:self.label];
运行,您可以看到熟悉的 “Hello World!” 出现在您的按钮之上。

4. 改变标签文本

就一个事了,如果你早前已经创建了按键按下的外壳方法,我们只需要添加一行代码将文本框的内容显示到标签文本上。完成后的 buttonPressed:

- (void)buttonPressed {
    self.label.text = self.textField.text;
}

完成!运行试试它吧。

查看完整代码在 Github.

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部