保存表视图中生成的随机数

时间:2014-04-27 16:59:26

标签: ios objective-c uitableview

我的应用目前正在生成随机数(请参阅下面的代码)。我想要的是在用户点击" Save"之后保存该号码。按钮并在表视图上显示它。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    [self.clickyButton setTitle:@"Generate" forState:UIControlStateNormal];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}




- (IBAction)handleButtonClick:(id)sender {
    // Generates numbers 1 to 49, without creating duplicate numbers.
    NSMutableSet * numberSet = [NSMutableSet setWithCapacity:5];
    while ([numberSet count] < 7 ) {
        NSNumber * randomNumber = [NSNumber numberWithInt:(arc4random() % 49 + 1)];
        [numberSet addObject:randomNumber];
    }

    NSArray * numbers = [numberSet allObjects];


    self.n1.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:0]];
    self.n2.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:2]];
    self.n3.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:3]];
    self.n4.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:4]];
    self.n5.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:5]];
    self.n6.text = [NSString stringWithFormat:@"%@", [numbers objectAtIndex:6]];
}






@end

请解释我如何将其保存在桌面视图中。 xcode初学者。

4 个答案:

答案 0 :(得分:1)

您应该创建一个可在整个类范围内访问的变量,而不仅仅是特定的-handleButtonClick:方法,然后将生成的数字添加到该变量 - 数组,集合等。 ..

从那里,您可以实现表视图以通过var[indexPath.row]从变量中读取值(假设它是一个数组),然后显示它。一旦数组填充了对象,您将需要调用[tableView reloadData];以确保tableview显示数据。

答案 1 :(得分:0)

  1. 为UITableViewDataSource创建一个NSMutableArray并缓存该数字。

  2. 当用户创建的号码时,将此号码添加到NSMutableArray中。

  3. 重新加载UITableView并显示所有数字。

答案 2 :(得分:0)

如果你只使用一个数字,你应该考虑在另一个UI元素中显示它,最好是UILabel我会说。

如果你想使用UITableView,你必须用静态单元格创建它(例如在故事板中)或者为它配置数据源和委托对象(现在看起来并不像你想要的那样,除非也许如果你想在列表中显示多个随机数...)

答案 3 :(得分:0)

在任何事情之前,你应该将数组编号作为变量。这样就比创建n1,n2,n3更容易....我将向您展示如何根据NSArray变量定义的现有数字来解决您的问题。

您需要在头文件中实现UITableView委托。因此,在实现委托之后,假设这是您的头文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>


@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

然后获取tableview(IBOutlet或以编程方式)并在实现文件中设置dataSource和delegate。你应该在viewDidLoad:方法中这样做:

 [_tableView setDelegate:self];
 [_tableView setDataSource:self];

完成此操作后,您需要为UITableView实现委托方法。这个:

此方法将告诉Table View需要显示多少行。在你的情况下,NSArray的大小称为数字:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{


return numbers.count;


}

此方法将告诉表格查看每个单元格上显示的内容(不要忘记将界面构建器中的单元格的细胞标识符分配给#34; Cell&#34;)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault    reuseIdentifier:cellIdentifier];
}
cell.textLabel.text = [numbers objectAtIndex:indexPath.row];
return cell;
}

如果您想在用户触摸表格视图中的单元格时执行某些操作,请使用此方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}

最后,当用户触摸按钮时,要在列表中添加数字,您只需将这些代码行添加到按钮触发的方法中:

- (IBAction)handleButtonClick:(id)sender {
// Generates numbers 1 to 49, without creating duplicate numbers.
NSMutableSet * numberSet = [NSMutableSet setWithCapacity:5];
while ([numberSet count] < 7 ) {
    NSNumber * randomNumber = [NSNumber numberWithInt:(arc4random() % 49 + 1)];
    [numberSet addObject:randomNumber];
}


//In case you want to delete previous numbers
[numbers removeAllObjects];

numbers = [numberSet allObjects];

[_tableView reloadData];


}