[Xcode] Todo列表创建一个iPhone应用程序|通过基本操作的组合轻松开发

大家好。 yuta fujii(@hofucamera.)是。

从这一次,我想在应用程序中开发“TODO列表iPhone应用程序”。

它可以通过基本功能的组合来开发。

让我们开发它。

如果您已建立Xcode环境,请单击此处

Todo列表应用程序的基本配置

首先,我们将引入基本配置。

这一次,让我们将项目名称决定为“todolist”。
如何创建一个项目 这里 它描述于。

如何制作一个todo列表

首先,我们将解释如何开发此Todo列表。

在流程之前,我了解到使用nsuserdefaults,如何使用数组,屏幕转换方法,屏幕和类是配对的。我们还将使用这些元素构建。

此TODO列表中有两个屏幕。

屏幕显示todo列表

第一个是“显示Todo列表”的“屏幕”,第二个是“注册才能注册Todo列表”。

简介本节介绍“显示TODO列表”的“屏幕”。

此屏幕上有三个主要项目。

一个是在显示“屏幕注册到待办事项列表”中注册的日期和时间,第二个是注册标题和文本(内容)。制作以下内容“显示”。

那么你如何显示它?通过检索在“屏幕以注册TODO列表”中注册的信息来显示。换句话说,它提出并显示在NsuserDefaults中注册的内容。

此外,执行屏幕转换到屏幕,用于将TODO列表与右上右上的加号列表注册。查看Todo列表时,可以查看每个按钮和上一个按钮。

屏幕注册到DO列表

然后,我们将组织“屏幕注册待办事项列表”。

以下是在这里进行的标题注册,注册文本,以及当前日期和时间的注册。这些都以包含标题的数组,包含文本的数组,以及当前日期和时间的数组,并且该数组将注册到NsUserDefaults。

构建TODO列表显示屏幕

让我们建立一个屏幕。
首先,我想仅回应垂直,所以取消选中以下红色部分。
Xcode_todo1.
xcode_todo2.
然后将模拟器设置为iPhone6。
xcode_todo3.

选择左侧的Main.StoryBoard,然后单击屏幕的红色部分,然后选择右上角的红色部分。
xcode_todo4.
Xcode_todo5.
选择写为大小的点,然后选择iPhone 4.7英寸。
xcode_todo6.
然后在屏幕上设置工具栏。在此,请将按钮设置为屏幕过渡到屏幕以注册Todo列表。
xcode_todo7.
首先,单击左侧的项目,然后选择右侧的红色部分。
xcode_todo8.
此外,选择添加如下。
xcode_todo9.
然后我认为可以看出,按钮已更改为+标记。
Xcode_todo1.0
接下来,我想将按钮设置为右边缘,但在工具栏的情况下,您可以通过放置以下部分轻松放置下面的零件。
Xcode_todo11.

此外,将ViewContoller的颜色更改为您喜欢的颜色。
Xcode_todo1.2
接下来,您将设置标签以显示注册的日期和时间。
设置视图后显示,
Xcode_todo13
请设置标签。此外,这里的标签是不改变任何内容的标签。
Xcode_todo1.5
此外,将标签放置反映右侧的日期和时间。这是一个删除和反映该值的标签,因此该程序应识别。
Xcode_todo1.6
然后设置UITextView以显示文本。
您还需要通过该程序识别,因为也显示出来。
Xcode_todo1.7
单击此UITextView以清除所有正确的字母。
Xcode_todo1.8
最后,设置标签以将标题显示为标签,以设置注册的日期和时间。
xcode_todo2.2.

在底部,让我们离开按钮查看Todo。
Xcode_todo23.
单击右上角的红色部分后,我们将连接必须在程序中更改的UILabel。
Xcode_todo24.
单击标签后,您将在按住命令时将其拖放到程序。
xcode_todo2.5
第一个标签是Datelable,
Xcode_todo26.
标签显示标题是钛合金的,
xcode_todo2.8
显示文本UITextView将被称为TodotextView并将其反映在程序中。
Xcode_todo30.
Xcode_todo31.

构建TODO列表注册屏幕

接下来,我们将构建一个todo列表显示屏幕。
选择右侧的ViewController并拖放到故事板中。
xcode_todo3.2.
此外,与先前的屏幕相同的方式,将大小为4.7英寸。
xcode_todo3.3.
这次,如果按+按钮,则要转换,因此在从红色部分按下命令并拖动和de
落后并将其作为过渡目的地。
xcode_todo3.4.
选择模具呈现。
Xcode_todo35.
此外,这也使用工具栏设置标签。
xcode_todo3.6.
由于该标签不必被计划更改,因此“请注册Todo”。此外,左侧项目被删除。
Xcode_todo37.
Xcode_todo38.

此外,如果您想在注册,拖放标签并命名为“标题”和“body”时注册您正在注册的位置。
Xcode_todo39.
xcode_todo4.0

并输入数据,将UITextField放在该标签旁边。
Xcode_todo41.
由于该文本也输入,因此如下设置以下内容。
Xcode_todo42.
删除开头中包含的字符。
xcode_todo4.3.
Xcode_todo44.
另外,这次更改ViewController颜色。
Xcode_todo46.
这里的所有都是它的。

Todo列表注册屏幕文件设置

接下来,设置文件。
当前创建的ViewController(屏幕)没有程序文件。

所以我想创造它。
转到文件→新→文件如下。
xcode_todo4.8.
然后选择Cocoa Touch类,然后单击“下一步”。
Xcode_todo49.
命名名为inputViewController的文件和下一个文件。
Xcode_todo5.0.
这完成了文件的创建。

接下来,集成屏幕和文件。

选择屏幕后,如下,在右侧的类中输入InputViWcontroller。如果你做得很好,你会出来的预测。
Xcode_todo5.1.
接下来,查看此屏幕上的程序文件。
单击屏幕的红色部分,然后选择右上角。
Xcode_todo52.
然后我认为该程序出现如下。
Xcode_todo53.
然后,只读取由程序控制的部件。
首先,选择屏幕上的UITextField,在拖放到程序侧时,在键盘上按住命令。
Xcode_todo5.4.
在这种情况下,我命名为InputTitle。
Xcode_todo5.5.
文本也是真的。
Xcode_todo5.6.
在这种情况下,我命名为InputText。
Xcode_todo57.
这是完成所有设置。

在应用程序中保存Todo信息

然后我们将实施此应用程序大脑的功能。

操作InputViewController.

然后我想开始。

現在▶当您按下按钮启动应用程序时,我认为屏幕右上角有一个+按钮出现在开头。

由于数据存储在应用程序中以保存应用程序中的数据以按住+按钮,因此将被编辑。

然后打开main.storyboard,单击屏幕,选择右上角的红色部分并查看程序。
xcode_part2_2.

宣言

首先,声明所需的元素。
它将是一个存储文本的数组,存储标题的数组(吨),存储标题的数组(吨),用于从上面的应用程序保存在应用中,以及存储日期的数组。
xcode_part2_3.

    NSUserDefaults *ud;
    
    NSMutableArray *titleArray;
    
    NSMutableArray *sentenceArray;
    
    NSMutableArray *dateArray;

关于阵列的保存

接下来,让我们创建一个保存按钮。
从右侧,拖放按钮并将其放在屏幕上,然后在按住按钮的同时将其拖放到程序侧。

xcode_part2_4.
然后,此处,按下此按钮按照保存时响应的位置的方法名称。
xcode_part2_5.
此外,我们还将初始化DateArray以外的任何内容,即使是早些时候宣称的那样。
xcode_part2_6.

    titleArray = [[NSMutableArray alloc] init];
    
    sentenceArray = [[NSMutableArray alloc] init];

    ud = [NSUserDefaults standardUserDefaults];

接下来,让我们分别在标题和正文中列出时写一个条件分支。
这里,如果标题或正文是空的,它将首先列出。
xcode_part2_7.

 if ([inputTitle.text isEqualToString:@""]||[inputText.text isEqualToString:@""]) {
        
        //空の場合は何もしない
        
        
    }

拿出节省的东西

接下来,我将列出下面的“否则”的一部分。
作为过程,首先删除包含存储在应用程序中的标题(标题)和句子的数组。

然后,在数组中包含的字符串数量中,将其放入将对象字符串的变量放入所有对象,同时,它将是一个titleArray(标题数组)和SentenceArray(一个阵列文本)。

Xcode_Part2_8.
        //取り出し
        nsarray * array1 = [ud arrayforkey:@"title"];
        for(array1中的nsstring *对象) {
            [titleArray addObject:object];
        }
        
        
        NSArray* array2 = [ud arrayForKey:@"sentence"];
        for ( NSString* object in array2 ) {
            [sentenceArray addObject:object];
        }

然后,我们将在包含应用程序中包含的字符串的数组中输入新输入的字符串。
xcode_part2_10

 //保存
        [titleArray addObject:inputTitle.text];
        [sentenceArray addObject:inputText.text];

最后,标题键值为标题,文本的键值存储在应用程序中作为句子。
同时挂起并检查它是否保存到其上。
Xcode_Part2_11.

//保存
        [ud setObject:titleArray forKey:@"title"];
        [ud setObject:sentenceArray forKey:@"sentence"];
NSLog(@"タイトル %@",[ud arrayForKey:@"title"]);
NSLog(@"本文  %@",[ud arrayForKey:@"sentence"]);

日志显示在底部,主要可以检查变量的内容。
这次我正在寻找标题的内容和用句子保存的键值。
此外,当处理完成时,它希望关闭此屏幕本身,因此

[self dismissViewControllerAnimated:YES completion:nil];

它描述了它。

xcode_part2_12.

关闭键盘

最后,当您触摸屏幕触摸时,请按照您的喜好写键盘,如下写入。
Xcode_Part2_13

// タッチイベントを取る
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    [inputTitle resignFirstResponder];
    [inputText resignFirstResponder];
    
}

我想确认您已保存。

让我们用模拟器检查

然后,左上角▶按下按钮检查模拟器。
首先,按+按钮。
Xcode_Part2_14
然后放置适当的字符,然后按“注册”按钮到标题和文本。
Xcode_Part2_15
然后,我认为可以看出,现在注册的字符串可以被验证为屏幕底部的日志到红色部分。
Xcode_Part2_16
此外,让我们把这些字母放在。
xcode_part2_17.
我想我可以看到保存的字符串增加了。xcode_part2_18

“删除”输入输入和“显示”输入输入

在实施功能的情况下,让我们让数据“删除”和“显示”。

关于生命周期[(void)查看Willappear:(BOOL)动画

首先,我认为它是“ViewDidload”它在项目开头列出。我认为这是屏幕显示时显示屏幕的规则,但有规则只有一个呼叫。

每次显示屏幕时调用称为“视图Willappear”的方法。

还有很多其他的东西,但命令称为ViewDidload→查看Willappear。
这被称为“生命周期”以这种方式调用的订单。

因为各种各样的人,那些感兴趣的人“ios,生命周期” 搜索 请试试。

从应用程序中删除数组[nsmutablearray的初始化]

让我们继续。

首先,我们将准备保存在应用程序中的数据。
声明nsuserdefaults并在ViewDidload中初始化它。
Xcode_todo1.

ud = [NSUserDefaults standardUserDefaults];

接下来,准备包含标题的数组,如下所示,一个包含主体的数组,或包含页码的int类型框。
xcode_todo4.

    NSMutableArray *title_array;

    NSMutableArray *sentence_array;
    
    int pageCount;

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

  title_array = [[NSMutableArray alloc] init];

  sentence_array = [[NSMutableArray alloc] init];

最后,这样做。
首先,写下以下内容。
xcode_todo8.

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

我会按顺序解释。
第一的
nsarray * array1 = [ud arrayforkey:@”title”];
使用标题的键值保存的数组被取出到Array1数组。
下一页

for(array1中的nsstring *对象)

当翻译成日语时,请在Array1中放入Array1中的Array1中的变量名称“数字”中的“数量”中的“标题”(标题),这意味着···

[title_array addObject:对象];

接下来,我们将继续后跟Title_Array数组,初始化对象的文本。
它是一个包含在array1中包含事物数量的东西的图像。

喜欢

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

还提取文本,它将被带入阵列。

按钮操作

接下来,选择以下下一个按钮,然后按住命令并拖放并拖放并将其附加到程序。
Xcode_todo1.0

我命名为下一个。
Xcode_todo11.

下一个按钮角色

按下此下一个按钮时,页面将在另一个旁边排列,我想返回到最后。
我想按下下列订单。
首先,如果在TODO列表中没有注册,则无法注册TODO,因此请注册和警报。
接下来,当Todo按下作为注册号码时,它将按顺序显示。
其中,如果以订单显示到结束,我们将返回开始。

得到一个警报

首先,写下如下。
Xcode_todo1.2

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

        [ac addAction:cancel];

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

正如我在以前写的那样,我在这里使用条件分支和UialertController。

第一的

    
if (title_array.count == 0) {

如果换句话说,换句话说,“当您在应用程序中放入数据时不包含title_array时,”当调用视图Willappear时,“。
也就是说,title_array.count是countle_array计数为0。

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

用来初始化警报屏幕。与此同时,我们已经决定标题。

下一页

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

按下按钮时的过程并设置按钮的类型。
一个重要的部分是一个样式是取消按钮的地方。

风格:Uialertionstylecancel.

然后,按钮将是屏幕(AC)。

 [ac addAction:cancel];

最后显示警报。

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

按顺序显示TODO

让我们下次看看。
Xcode_todo13

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

第一的

 if (title_array.count>=pageCount){

“当您按下下一个按钮时,它将大于PageCount的数量,这些pageCount在下一个按钮按下Title_Array中的数字时越来越多地增加。

下一个,

  
     pageCount = pageCount + 1;

我们将逐一提高PageCount的价值。这用于指定要检索的数组的位置。

在那里

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

首先,

if (title_array.count<pageCount)

如果PageCount的数量是按下按钮时越来越多的,则它将大于数组的数量(title_array)

 pageCount = 1;

PageCount将值返回给1。

 titleLable.text = [title_array objectAtIndex:0];
            
 toDoTextView.text = [sentence_array objectAtIndex:0];

此外,TINLELABLE的文本将是TITES_ARRAY 0th(第一个字符)。
此objectatIndex此处用于指定数组编号。
todotextview也这样做。

在最后

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

换句话说,如果您正在越来越多,您就在标题_RARAY阵列:PageCount Number-1并将其处理到TitleLable.text。
为什么IT -1,当按下下一个按钮时,PageCount的值已从0增加。因此,如果您不给出-1,则无法获取Title_Array数组的第0个。
数组不会从1开始,但从0开始。

让我们用模拟器检查

然后我想用模拟器确认。
首先,它是第一个屏幕。
没有什么是无法登记的状态。
我们将在右上角+按钮上注册Todo。
Xcode_todo1.4
然后,当注册完成后,请按下一个按钮。
Xcode_todo21.
我明白它会一个接一个地改变,我认为它会看到它是流传的。
xcode_todo2.2.

尝试删除新注册日期,在应用程序中

然后让我们置于日期,时间并将其删除,以便可以取出数据。

获取约会|准备阵列

让我们启动这一点!
我将在最后一次前进,所以我认为我从InputViewController.m开始。
首先,我们将为当前时间准备一个数组。
xcode_todofor1.

NSMutableArray *timeArray;

然后把它拿出来。
在这种情况下,键值是时间。
xcode_todofor2.

        NSArray* array3 = [ud arrayForKey:@"time"];
        for ( NSString* object in array3 ) {
            [timeArray addObject:object];
        }

使用nsdate.

创建一个新的和当前时间方法。
创建一个名为getData的方法。
xcode_todofor3.

-(void)getData{

}

您将在其中描述您在其中获取此时的当前时间,并在适当的位置调用此GetData。
xcode_todofor4.

 NSDate *date = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *dateComps = [calendar components:NSYearCalendarUnit |NSMonthCalendarUnit |NSDayCalendarUnit  |NSHourCalendarUnit   |NSMinuteCalendarUnit |NSSecondCalendarUnit
                                              fromDate:date];

您可以获得此模板中的当前时间。
您将能够在课堂上获得它。

此外,将其转换为字符串,以反映在标签上使用此nsdate拍摄的值。

xcode_todofor5.
  nsstring * for_string = [nsstring stringwithformat:@"%ld年",(长)[Datecomps年];
    
    NSString *month_string = [NSString stringWithFormat:@"%ld月",(long)[dateComps month]];

    NSString *day_string = [NSString stringWithFormat:@"%ld日",(long)[dateComps day]];
    
    NSString *hour_string = [NSString stringWithFormat:@"%ld時",(long)[dateComps hour]];
    
    NSString *minute_string = [NSString stringWithFormat:@"%ld分",(long)[dateComps minute]];

从上面,年,月,日,一天,日,一天。
让我们作为一个例子看一个。

nsstring * for_string = [nsstring stringwithformat:@”%ld年”,(长)[Datecomps年];

此nsstring * vall_string正在准备一个字符串类型框。
然后,[nsstring stringwithformat:将某些值转换为字符串。用法如下。

 NSString *str = [NSString stringWithFormat:@“%@",何らかの変数];

这里的一些变量

(long)[dateComps year]

变得。此外,我们在Datecomps年度越来越一年。

此外,我想这样做,因为这些是独立的现有和组合字符串。
声明包含组合字符串的变量。
xcode_todofor6.

NSString *timeResult;

然后结合它。
xcode_todofor 7.

NSString *val1 = [year_string stringByAppendingString:month_string];

NSString *val2 = [val1 stringByAppendingString:day_string];
    
NSString *val3 = [val2 stringByAppendingString:hour_string];
    
NSString *val4 = [val3 stringByAppendingString:minute_string];

timeResult = val4;

本节介绍了在此处在此处进行的。

如果你是日本人

nssting * box = [source字符串stringbyappending string:我要组合的字符串变量];

这将是。

组合时使用stringByAppIningString。

并致电getData。
xcode_todofor8.

将最后一个合并的字符串放在TimeArray数组中。
xcode_todofor9.

 [timeArray addObject:timeResult];

此外,还将数据保存为应用程序中的键值时间。
xcode_todofor1.0.

   [ud setObject:timeArray forKey:@"time"];

最后,初始化TimeArray。
xcode_todofor1.1.

timeArray = [[NSMutableArray alloc]init];

在ViewController中检索日期数据

我会在这里查看converoller.m。
在本节中,我们将在从应用程序中保存Todo并将其反映在标签上时,我们将检索要同时存储的日期数据。

首先,声明名为timearray的变量。
xcode_todofor1.2.

NSMutableArray *timeArray;

接下来,初始化TimeArray。
Xcode_todofor13.

timeArray =  [[NSMutableArray alloc] init];

然后取出以键值为Array3保存的数组。
另外,该阵列中包含的字符串将改变为对象的变量并放入TimeArray。

Xcode_todofor14.
 NSArray* array3 = [ud arrayForKey:@"time"];
    for ( NSString* object in array3 ) {
        [timeArray addObject:object];
    }

最后,就像标题或文本一样,它将反映在标签中。
xcode_todofor1.5.

Xcode_todofor16.
dateLable.text = [timeArray objectAtIndex:0];

dateLable.text = [timeArray objectAtIndex:pageCount-1];

让我们用模拟器检查

然后,让我们用模拟器检查。
使用+按钮注册Todo后,
xcode_todofor1.7.
按下一个按钮查看它,
xcode_todofor1.8.
我认为可以看出,在显示注册的日期和时间旁边注册时的时间。
xcode_todofor1.9.

摘要:可以使用基本组合开发Todo列表应用程序

可以长时间更长时间,但可以开发待办事项列表应用的基本组合。

如果内容位于头部,则可以开发一些基本内容。

请试试。

给这篇文章的人

yuta

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