在iphone中单击按钮时如何将文本字段/标签中的值添加到数组中

Posted

技术标签:

【中文标题】在iphone中单击按钮时如何将文本字段/标签中的值添加到数组中【英文标题】:How add values from text field / label to an array when a button click in iphone 【发布时间】:2012-05-07 04:47:19 【问题描述】:

我有一个文本字段,用户可以在其中输入 1-10 的值

在文本字段的底部我有按钮。

当用户点击完成按钮时,我需要将文本字段中的值添加到数组中

为此,我编写了这样的代码。

- (void)viewDidLoad

    [super viewDidLoad];
    PainlevelsArray = [[NSMutableArray alloc] init]; //PainlevelsArray declared in .h




-(IBAction)doneClick:(id)sender

    [PainlevelsArray addObject:txtField.text ];

    // [PainlevelsArray insertObject:rateLabel.text atIndex:0 ];
    NSLog(@"PainlevelsArray *** %@",PainlevelsArray);

   [self.navigationController popToRootViewControllerAnimated:YES];


但是每次点击按钮时,数组只在日志中显示最近添加的一个值,像这样

控制台输出

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

2012-05-07 10:11:15.689 ESPT[796:10d03] PainlevelsArray *** (
    2
)
2012-05-07 10:11:27.984 ESPT[796:10d03] PainlevelsArray *** (
    4
)

My array gets empty every time view loads, and adde a fresh entry when button clicks 但我需要这样的

2012-05-07 10:11:27.984 ESPT[796:10d03] PainlevelsArray *** (
        4,
        5,
        2,
        6,
        8,
    )

所有输入的velues都添加/插入到现有数组中。

提前致谢

在练习开始视图控制器中

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
 ExerciseResult *result = [[ExerciseResult alloc] init];
            [self.navigationController pushViewController:result animated:YES];
            [result release];
    

在当前/ExerciseResult 视图控制器中

- (void)viewDidLoad

    [super viewDidLoad];
    PainlevelsArray = [[NSMutableArray alloc] init]; //PainlevelsArray declared in .h




-(IBAction)doneClick:(id)sender

    [PainlevelsArray addObject:txtField.text ];

    // [PainlevelsArray insertObject:rateLabel.text atIndex:0 ];
    NSLog(@"PainlevelsArray *** %@",PainlevelsArray);

   [self.navigationController popToRootViewControllerAnimated:YES];


【问题讨论】:

描述你的视图控制器。 在编辑问题中查看我描述的视图控制器 好的,我在 caht 列表中,但你是隐形的 见下面我发布的答案...... 【参考方案1】:

你需要使用一个全局数组。

最好的解决方案是在 AppDelegate.h 文件中声明一个数组,然后在 applicationdidfinishlaunch 方法中分配初始化这个数组。

AppDelegate *app =  (AppDelegate*)[[UIApplication sharedApplication] delegate];
[app.arrMutable addObject:textField.text ]; 

使用 UserDefaults:这些用于以键值格式保存您的应用程序数据。存储为 userdefaults 的值/对象始终保留在应用程序中,直到您尚未将其从沙箱中删除。您可以使用以下代码将数组存储在 userdefaults 中。

[[NSUserDefaults standardUserDefaults] setObject:app.arrMutable forKey:@"Global_Array_Key"];

在 AppDelegae applicationDidFinishLuanch 方法中,您可以使用以下方法从 userdefaults 中检索此数组:

self.arrMutable = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"Global_Array_Key"]];

【讨论】:

是的,先生,这是所有这些中最好的答案,但是当应用程序启动时,数组再次变空/重新加载。 (而不是视图加载) 如果您想在应用程序重新启动后访问相同的数组,可以使用 NSUserDefaults【参考方案2】:

您需要全局声明和初始化 PainlevelsArray,即在 AppDelegate 或共享实例的单独类中,其中内存已分配一次,即使您多次访问该类,它也不会覆盖其数据等它将不断向数组中插入新值,您将获得所需的结果。

【讨论】:

或者他可以在关闭时将值传回前一个视图控制器(可能通过委托)。它不一定是全局变量... 全局实例将是最佳实践,而不是设置委托并使代码变得不必要地复杂。 是的,如果我声明全局数组在每次应用启动时启动。在这种情况下,每次视图加载时数组都会启动。两种情况数组都以空数组开始。 不,全局声明的数组将保持为空,直到第一次调用视图。之后,每次它都会将文本字段中的值插入其中。然而,如果数组在所述视图加载时开始,它将始终保持为空,并且不会连续添加到先前存储的值列表中。【参考方案3】:
ExerciseResult *result = [[ExerciseResult alloc] init];
[self.navigationController pushViewController:result animated:YES];
[result release];

我认为您可能会因为进入此视图而在您的操作中使用这种类型的代码。取而代之的是,您必须将其作为全局练习结果 *result

在.h中

ExerciseResult *result;

在.m

in viewDidLoad

result = [[ExerciseResult alloc] init];

在你的行动方法中你会放松

[self.navigationController pushViewController:result animated:YES];

你会这样跟随

希望对你有帮助

【讨论】:

【参考方案4】:

在 Delegate.h 页面中声明

  @interface AppDelegate : NSObject <UIApplicationDelegate>
  
       NSMutableArray *commString;
  
  @property (nonatomic, retain) NSMutableArray *commString;
  @end

Delegate.m 页面

  @sythesize commString;

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     
          commString = [[NSMutableArray alloc] init];
          // some code.....
 

在您的按钮视图中

 -(IBAction)doneClick:(id)sender

NSMutableArray *mut=[[NSMutableArray alloc] initWithObjects:txtField.text,nil];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.commString=mut;

   // some code....

在你想要你的数组的地方声明这段代码,你可以很容易地得到你的数组。

   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
   NSLog(@"commString=%@",appDelegate.commString);

【讨论】:

如果您使用此代码,请接受此问题并增加您的积分。谢谢【参考方案5】:

你用这行代码点击的时候就写加这行吧。

[array addobject:textfield.text];

只用这个。

[PainlevelsArray addObject:txtField.text]

【讨论】:

如果在每个条目后弹出视图控制器是期望的行为,那么他需要将数据存储在前一个视图控制器中。 如果对您有帮助,请标记它,以便对其他人也有帮助 我不明白你在说什么。 我是说 Ranga 有 popToRootViewController 可能是有原因的,而且这个解决方案可能无法按预期工作。 不,这不是原因。【参考方案6】:

在这种情况下,您应该使用数组的属性。

@property (nonatomic, strong) NSMutableArray *painlevelsArray;

初始化数组

NSMutableArray *array = [[NSMutableArray alloc] init];
self.painlevelsArray = array;

然后在每次单击按钮后将您的字符串添加到数组中

[self.painlevelsArray addObject:[NSString stringWithFormat:@"%@",self.textField.text]];

【讨论】:

不完全一样。他需要使用属性来管理这个数组。我不确定他使用了多少个视图控制器。他应该在他的主视图控制器中初始化该数组,并将其传递给带有按钮的视图控制器,以向其中添加一个对象。我们缺少太多代码,我无法正确回答这个问题。

以上是关于在iphone中单击按钮时如何将文本字段/标签中的值添加到数组中的主要内容,如果未能解决你的问题,请参考以下文章

单击表格视图中的按钮时如何更改表格视图外部的标签文本

当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?

在按钮上单击位于 tableview 中的所有文本字段的明文

iPhone SDK:如何在警报中获取 UITextField 的值?

以编程方式创建与点击按钮关联的标签

哪个委托方法将调用单击键盘中的退格按钮