0

所以我得到了这个名为 tableDateArray 的数组设置,它在SubClass.h中定义。现在我试图在是否选择按钮时更改数组的数据。

我在MainView.m中的代码:

- (IBAction)dateSpecifiedButtonTouch:(id)sender {

if (monthly.enabled == NO){
    NSLog(@"no");
    tableDateArray = [NSArray arrayWithObjects:
                      @"January 2012",
                      @"February 2012",
                      @"March 2012",
                      @"April 2012",
                      @"May 2012",
                      @"June 2012",
                      @"July 2012",
                      @"August 2012",
                      @"September 2012",
                      @"Octobre 2012",
                      @"November 2012",
                      @"December 2012",
                      @"All months",
                      nil];
    }

if (monthly.enabled == YES){
    NSLog(@"yes");
    tableDateArray = [NSArray arrayWithObjects:
                      @"2002",
                      @"2003",
                      @"2004",
                      @"2005",
                      @"2006",
                      @"2007",
                      @"2008",
                      @"2009",
                      @"2010",
                      @"2011",
                      @"2012",
                      @"All years",
                      nil];
}}

所以 NSlog 正在跟踪正确的值,所以这不是问题。但是我的数组将填充首先选择的任何状态并且拒绝更改数据。我确定我忽略了一些简单的事情。

根据请求添加:

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

我不认为我打电话reloaddata说实话。

4

5 回答 5

2

从提供的代码到现在看起来还可以。没有理由说它为什么不工作

可能这是编写代码的更正确的方法

- (IBAction)dateSpecifiedButtonTouch:(id)sender {
    if (monthly.enabled)
    {
        NSLog(@"yes");
        tableDateArray = [NSArray arrayWithObjects:
                          @"2002",
                          @"2003",
                          @"2004",
                          @"2005",
                          @"2006",
                          @"2007",
                          @"2008",
                          @"2009",
                          @"2010",
                          @"2011",
                          @"2012",
                          @"All years",
                          nil];
    }
    else
    {
        NSLog(@"no");
        tableDateArray = [NSArray arrayWithObjects:
                          @"January 2012",
                          @"February 2012",
                          @"March 2012",
                          @"April 2012",
                          @"May 2012",
                          @"June 2012",
                          @"July 2012",
                          @"August 2012",
                          @"September 2012",
                          @"Octobre 2012",
                          @"November 2012",
                          @"December 2012",
                          @"All months",
                          nil];

    }
[table reloadData];
}

编辑 :

好的,为此我说有 2 个 ViewControllers VC1、VC2

在 VC1 中,您正在更新值,而在 VC2 中,表中包含名为 inputArray 的数据源数组。

  • 所以在VC1中按下按钮时
  • 获取vc2的实例
  • 将数组分配给 VC2instance.inputArray=tableDataArray;
  • 使用 reloadData 在表中调用刷新
于 2013-05-30T11:25:11.217 回答
1

哎呀......这么多答案都错了。

只需[yourTableViewOutlet reloadData]从触摸每月按钮的 IBAction 调用。

例如

- (IBAction)dateSpecifiedButtonTouch:(id)sender {
    ...
    ...
    ...
    ...
    [yourTableViewOutlet reloadData];
}

当然,您需要将“ yourTableViewOutlet”更改为您已连接到插座的表格视图的真实名称。

于 2013-05-30T11:26:04.343 回答
0

reloadData我按照建议使用了我的问题。但是,reloadData必须在 viewWillAppear 中调用,否则它拒绝更新我的 tableView。

代码:

- (void)viewWillAppear:(BOOL)animated{
    [self.tableView reloadData];
}
于 2013-06-03T10:51:38.380 回答
0
- (IBAction)dateSpecifiedButtonTouch:(id)sender {

    if (monthly.enabled == NO){
        NSLog(@"no");
        tableDateArray = [[NSMutableArray alloc ]initWithObjects:
                          @"January 2012",
                          @"February 2012",
                          @"March 2012",
                          @"April 2012",
                          @"May 2012",
                          @"June 2012",
                          @"July 2012",
                          @"August 2012",
                          @"September 2012",
                          @"Octobre 2012",
                          @"November 2012",
                          @"December 2012",
                          @"All months",
                          nil];
    }

    if (monthly.enabled == YES){
        NSLog(@"yes");
        tableDateArray = [[NSMutableArray alloc ]initWithObjects:
                          @"2002",
                          @"2003",
                          @"2004",
                          @"2005",
                          @"2006",
                          @"2007",
                          @"2008",
                          @"2009",
                          @"2010",
                          @"2011",
                          @"2012",
                          @"All years",
                          nil];
    }}
于 2013-05-30T12:09:13.187 回答
0
- (IBAction)dateSpecifiedButtonTouch:(id)sender {
    //maybe toggle monthly.enabled here?
    [yourTableView reloadData];

}
static NSArray * tableDateArray = nil;
static NSArray * tableYearArray = nil;
+(void)initialize
{
     if(self == [MyCLass class])
     {
           tableDateArray = [[NSMutableArray alloc ]initWithObjects:
                          @"January 2012",
                          @"February 2012",
                          @"March 2012",
                          @"April 2012",
                          @"May 2012",
                          @"June 2012",
                          @"July 2012",
                          @"August 2012",
                          @"September 2012",
                          @"Octobre 2012",
                          @"November 2012",
                          @"December 2012",
                          @"All months",
                          nil];

           tableYearArray = [[NSMutableArray alloc ]initWithObjects:
                          @"2002",
                          @"2003",
                          @"2004",
                          @"2005",
                          @"2006",
                          @"2007",
                          @"2008",
                          @"2009",
                          @"2010",
                          @"2011",
                          @"2012",
                          @"All years",
                          nil];
     }
}

//all of your tableview delegates/data sources:
{
     NSArray * dataSource;

     dataSource = monthly.enabled ? tableDateArray : tableYearArray;
     //use datasource as the datasource
}
于 2013-05-30T13:26:58.910 回答