让我们创建一个待办事项列表iPhone应用程序(第3部分)

大家好。藤田裕太(@HofuCamera)是。

这是“让我们开发待办事项清单iPhone应用程序”的第3部分。

待办事项清单让我们创建一个iPhone应用程序(第1部分)
待办事项清单让我们创建一个iPhone应用程序(第2部分)

在第3部分中,我想“取出”和“显示”上次在应用程序中输入的数据。这是这次的目标。

<<到最后一次的路线>>


让我们为iPhone应用程序开发准备环境
开发iPhone应用程序需要什么
让我们开发没有程序的红卡iPhone应用程序
让我们开发一个没有程序的彩色卡片应用程序
让我们开发您最喜欢的网站集应用
让我们开发一个笔记邮件应用程序(第1部分)
让我们开发一个笔记邮件应用程序(第2部分)
让我们开发在10秒内停止的“ Just Time iPhone App”(第1部分)
让我们开发一款仅需10秒即可停止运行的游戏,只需一次使用时间(第2部分)
让我们开发一个谎言电话应用
让我们创建一个密码iPhone应用程序(第1部分)
让我们创建一个密码iPhone应用程序(第2部分)


关于生命周期

-(void)viewWillAppear:(BOOL)动画

首先,我认为到目前为止,在我撰写的文章中,始终在项目开始时提到“ viewDidLoad”。我认为有一个规则,即在显示屏幕时首先调用此规则,但只能调用一次。

每次显示屏幕时,都会调用我们这次要处理的名为“ viewWillAppear”的方法。

还有很多其他东西,但是它们的调用顺序是viewDidLoad→viewWillAppear。
以这种方式调用它们的顺序称为“生命周期”。

有各种各样的东西,所以如果您有兴趣,请说“ iOS,生命周期”搜索请试试。

从应用程序中提取数组

NSMutableArray的初始化

让我们继续。

首先,准备输出存储在应用程序中的数据。
声明NSUserDefaults后,在viewDidLoad中对其进行初始化。
xcode_todo1

ud = [NSUserDefaults standardUserDefaults];

接下来,准备一个包含标题的数组,一个包含文本的数组以及一个包含页码的int类型框,如下所示。
xcode_todo4

    NSMutableArray *title_array;

    NSMutableArray *sentence_array;
    
    int pageCount;

然后,在viewWillAppear中初始化每个数组。
xcode_todo7

  标题_array = [[NSMutableArray alloc] init];

  sentence_array = [[NSMutableArray alloc] init];

最后,将其取出。
首先,编写以下内容。
xcode_todo8

 //取り出し
    NSArray * array1 = [ud arrayForKey:@"title"];
    对于(NSString * array1中的对象) {
        [title_array addObject:object];
        
    }
    
    
    NSArray* array2 = [ud arrayForKey:@"sentence"];
    for ( NSString* object in array2 ) {
        [sentence_array addObject:object];
    }

我将逐步解释。
第一,
NSArray * array1 = [ud arrayForKey:@”title”];
将上次使用标题键值保存的数组提取到名为array1的数组。
下一个

对于(NSString * array1中的对象)

翻译成日文后,请将array1中包含的文本(在本例中为标题)放入变量名称NSString类型对象中的次数是array1中包含的事物数量的多少倍。代表着 · · ·

[title_array addObject:object];

接下来,将包含文本对象的框按顺序放在之前初始化的名为title_array的数组之后。
这是一张与array1中的事物数量相比越来越多的图像。

以同样的方式

 NSArray* array2 = [ud arrayForKey:@"sentence"];
    for ( NSString* object in array2 ) {
        [sentence_array addObject:object];
    }

我也将文本删除,并将其放置在越来越多的位置。

按钮操作

接下来,选择“下一步”按钮,如下所示,然后在按住命令的同时将其附加到程序上,然后进行拖放。
xcode_todo10

接下来我给它命名。
xcode_todo11

下一个按钮的作用

当我按下该下一个按钮时,页面会依次翻页,到达终点时,我想返回到起点。
我想按以下顺序写。
首先,如果“待办事项”列表中未注册任何内容,则将发出警报,要求您注册,因为未注册“待办事项”。
接下来,如果您按Next(下一步)输入已注册任务的数量,则将按顺序显示它们。
其中,当任务按顺序显示到最后时,返回到开始。

发出警报

首先,编写如下。
xcode_todo12

 if (title_array.count == 0) {
        
        // コントローラを生成
        UIAlertController *ac =
        [UIAlertController alertControllerWithTitle:@"ToDoが登録されていません"
                                            message:@"ToDoを登録してください"
                                     preferredStyle:UIAlertControllerStyleAlert];
        
        //キャンセル用のボタンとアクションを生成
        UIAlertAction *cancel =
        [UIAlertAction actionWithTitle:@"キャンセル"
                                 样式:UIAlertActionStyleCancel
                               handler:^(UIAlertAction * action) {
                                   // ボタンタップ時の処理
                                   
                                   
                               }];

        [ac addAction:cancel];

        // アラートを呼び出す
        [self presentViewController:ac animated:YES completion:nil];
    
    }

正如我在上一篇文章中所写,我在这里使用条件分支和UIAlertController。

第一,

    
if (title_array.count == 0) {

也就是说,如果未注册ToDo,也就是说,“当调用viewWillAppear时,如果在输入应用程序中的数据时title_array中没有任何内容”。
换句话说,title_array.count是如果title_array的计数为0。

UIAlertController *ac =
        [UIAlertController alertControllerWithTitle:@"ToDoが登録されていません"
                                            message:@"ToDoを登録してください"
                                     preferredStyle:UIAlertControllerStyleAlert];

警报屏幕被初始化。同时,确定标题等。

下一个

 //キャンセル用のボタンとアクションを生成
        UIAlertAction *cancel =
        [UIAlertAction actionWithTitle:@"キャンセル"
                                 样式:UIAlertActionStyleCancel
                               handler:^(UIAlertAction * action) {
                                   // ボタンタップ時の処理
                                   
                                   
                               }];

设置了按下按钮时的处理和按钮的类型。
重要的部分是将样式设置为“取消”按钮。

样式:UIAlertActionStyleCancel

然后按按钮到屏幕(ac)。

 [ac addAction:cancel];

最后,显示警报。

 // アラートを呼び出す
        [self presentViewController:ac animated:YES completion:nil];

按顺序显示任务

接下来,让我们在这里看看。
xcode_todo13

 if (title_array.count>=pageCount){
        
        //常にインクリメント
        pageCount = pageCount + 1;
        
        if (title_array.count<pageCount){
            
            pageCount = 1;
            标题Lable.text = [title_array objectAtIndex:0];
            
            toDoTextView.text = [sentence_array objectAtIndex:0];
            
        }else{
        
        标题Lable.text = [title_array objectAtIndex:pageCount-1];
        
        toDoTextView.text = [sentence_array objectAtIndex:pageCount-1];
        }
    }

第一,

 if (title_array.count>=pageCount){

表示“如果title_array中的数字大于按下一个按钮时按下一个按钮时按顺序增加的pageCounts数”。

下一个,

  
     pageCount = pageCount + 1;

将pageCount的值一一增加。这用于指定要检索的序列的位置。

在里面

if (title_array.count<pageCount){
            
            pageCount = 1;
            标题Lable.text = [title_array objectAtIndex:0];
            
            toDoTextView.text = [sentence_array objectAtIndex:0];
            
        }

首先

if (title_array.count<pageCount)

如果按下按钮时一个接一个增加的pageCounts数量大于数组的数量(title_array)

 pageCount = 1;

将pageCount的值返回为1。

 标题Lable.text = [title_array objectAtIndex:0];
            
 toDoTextView.text = [sentence_array objectAtIndex:0];

另外,titleLable的文本将是title_array的第0个(第一个字符)。
这里的objectAtIndex用于指定数组编号。
toDoTextView也是一样。

最后

else{
        
        标题Lable.text = [title_array objectAtIndex:pageCount-1];
        
        toDoTextView.text = [sentence_array objectAtIndex:pageCount-1];
        }

并非如此,也就是说,当它增加时,取出title_array数组的:pageCount -1并将其放在titleLable.text中。
进行-1的原因是,当第一次按下“下一步”按钮时,pageCount的值已经从0增加到1。因此,如果不执行-1,则无法获得title_array数组的第0个。
数组不是从1开始,而是从0开始。

让我们来看看模拟器

然后,我想用模拟器检查一下。
首先是第一个屏幕。
没有待办事项注册。
按右上方的+按钮注册待办事项。
xcode_todo14
然后,完成注册后,请按“下一步”按钮。
xcode_todo21
您会看到它正在一个接一个地变化,并且又在循环。
xcode_todo22

最后

它怎么样?

这次,我取出了应用程序中包含的数组,并使用for语句一个接一个地输出了内容,并应用了条件分支来执行适当的处​​理。

一旦可行,就可以将其应用于各种情况。例如,它不仅可以用于ToDo应用,还可以用于其他想法。下次,我将尝试显示以相同方式注册ToDo的时间。这次结束了!

撰写本文的人

yuta

从零开始创建专业的Instagram风格图像处理iPhone应用程序 特別クーポン配布中! 詳しくは从这里! エンジニアでプロデューサー ピーターティールが大好きです! Twitter:藤井裕太 質問はお気軽にどうぞ!