Ios 如何在UIView中保存/重新加载各种按钮

Ios 如何在UIView中保存/重新加载各种按钮,ios,uiview,Ios,Uiview,我有一个简单的问题:我的用户可以在UIView中添加按钮。我会使用NSUserDefault保存各种按钮,然后在应用程序启动时(而不是后台)将它们重新加载到ui视图中。我该怎么办 -(void)AddButton:(UIButton*)sender { CountButton++; if (CountButton< 11) { button2 = [UIButton buttonWithType:UIButtonTyp

我有一个简单的问题:我的用户可以在
UIView
中添加按钮。我会使用
NSUserDefault
保存各种按钮,然后在应用程序启动时(而不是后台)将它们重新加载到
ui视图中。我该怎么办

    -(void)AddButton:(UIButton*)sender {
         CountButton++;
           if (CountButton< 11) {
            button2 = [UIButton buttonWithType:UIButtonTypeCustom];
            button2.frame = CGRectMake(20, 80, 120, 80);
            UIImage *buttonImage = [UIImage imageNamed:@"image"];
            [button2 setBackgroundImage:buttonImage forState:UIControlStateNormal];
            NSString* buttonTitle = [NSString stringWithFormat:@"Button%d", CountButton];
            [button2 setTitle:buttonTitle forState:UIControlStateNormal];
            NSString *selectorName = [NSString stringWithFormat:@"ButtonAdd%d:", CountButton];

    [button2 addTarget:self action:NSSelectorFromString(selectorName)forControlEvents:UIControlEventTouchUpInside];
}}
-(void)AddButton:(UIButton*)发送方{
CountButton++;
如果(计数按钮<11){
button2=[UIButton按钮类型:UIButtonTypeCustom];
button2.frame=CGRectMake(20,80,120,80);
UIImage*buttonImage=[UIImage ImageName:@“image”];
[按钮2设置背景图像:状态的按钮图像:uicontrol状态正常];
NSString*ButtonTile=[NSString stringWithFormat:@“按钮%d”,CountButton];
[按钮2设置标题:状态的按钮提示:uicontrol状态正常];
NSString*selectorName=[NSString stringWithFormat:@“按钮添加%d:,计数按钮];
[按钮2添加目标:自我操作:控制事件的NSSelectorFromString(selectorName):UIControlEventTouchUpInside];
}}

在控制器的viewDidLoad中,检查先前存储的NSUserDefault值,并以编程方式创建多个按钮,然后将它们作为子视图添加到控制器的视图中


希望能有所帮助。

NSUserDefaults适用于小数据块。保存大量按钮可能不是NSUserDefault的最佳选择。考虑使用文件代替。您可以在代码中的适当时间加载文件,以便显示保存的按钮

首先创建按钮,如发布的代码中所示:

button2 = [UIButton buttonWithType:UIButtonTypeCustom];
button2.frame = CGRectMake(20, 80, 120, 80);
//etc...
要使用按钮写入文件,请执行以下操作:

NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                                   NSUserDomainMask,
                                                                   YES);
NSMutableString *documentDirectory = [documentDirectories objectAtIndex:0];
NSArray *myArray = [[NSArray alloc] initWithObjects:myButton1, myButton2, myButton3, nil];
NSString *filePath = [documentDirectory stringByAppendingPathComponent:@"UserButtons"];
BOOL fileError = [myArray writeToFile:filePath atomically:YES];
NSLog(@"User data to file successful: %@",(fileError ? @"Yes" : @"No"));
要读取文件,请执行以下操作:

NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                                       NSUserDomainMask,
                                                                       YES);
    NSMutableString *documentDirectory = [documentDirectories objectAtIndex:0];
    NSString *myPath = [documentDirectory stringByAppendingPathComponent:@"UserButtons"];
    NSArray *fileArray = [[NSArray alloc] initWithContentsOfFile:myPath];
    if([fileArray count] > 0)
    {
        // place your buttons back into the view.
        // [self.view addSubview:[fileArray objectAtIndex:0]];
    }

将所有按钮添加到数组中。然后将数组添加到UserDefault:

   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

            [userDefaults setObject:buttonArray
                             forKey:@"buttons"];
            [userDefaults synchronize];
在您的viewDidLoad上: 这样做:

最后,在数组中循环并添加每个按钮


干杯

你想要什么还不是很清楚。您想知道如何使用NSUserDefault吗?另一件事,请尽量使您的代码更清晰(适当缩进)…我可以通过uiview上的AddButton创建10个不同的按钮。当我再次关闭应用程序时,10个按钮消失了。然后我的用户被迫重新创建10个按钮。如何保存用户创建的按钮?请检查我的答案或sangony的答案。。这两个按钮都适用于您好主意,但我不认为10个按钮的数组对于NSUserDefaults来说太多了……我想这取决于偏好(双关语)。我通常按照“这是一种偏好”的原则进行操作。如果是,那么我使用NSUserDefaults。我通常做的是,如果我有多个属性,字段。。。我使用外部文件、plist或核心数据,这取决于我需要它做什么。但是如果它是一个对象(在本例中是数组),并且大小有限(不是会破坏内存的东西),我使用NSUserDefaults。。。我仍然认为我自己新的Objto-C,所以请纠正我,如果我错了…谢谢你一点也没有错。做适合你的事,偶尔尝试新东西。我有用户数据要归档成功:没有,但在.h文件的事情上我必须添加sangony?我有用户数据要归档成功:有sangony帮助,但不要去!!!在我的文件h中,我必须添加的东西,但可能没有我可以帮助的?需要一颗善良的心
buttonsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"buttons"];