1

我在 storybord 和 UISegmentedControl 中有一个 tableView 来用不同的数据和不同的设计填充上面提到的表。我的问题是 numberOfRowsInSection 方法在我切换 UISegmentedControl 时没有反应。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(self.segment.selectedSegmentIndex==0)
{
    return [self.items count];
    NSLog(@"Nominals: %d",self.items.count);
}
if(self.segment.selectedSegmentIndex==1)
{
    return [self.coinageArr count];
    NSLog(@"Coinage: %d",self.coinageArr.count);
}
//return 0; Complains about no return.
}

好吧,NSLogs 在导航时不起作用。在这种情况下如何返回 NSInteger ?

提前谢谢。

编辑:对于shannoga

段控制器切换方法:

-(IBAction)segmentValueChaged:(id)sender
{
switch (self.segment.selectedSegmentIndex) 
{
    case 0:
    {
         DBAccess *access=[[DBAccess alloc]init];
        self.items=[access returnNominals:self.entityID nk:fromPeriod];
        [access closeDataBase];            
        self.tableView.hidden=NO;
        [self.tableView reloadData];
         break;
    }
    case 1:
    {
        DBAccess *access=[[DBAccess alloc]init];
        self.coinageArr=[access returnCoinage:fromPeriod period:self.entityID];
        self.tableView.hidden=NO;
        [self.tableView reloadData];

        break;
    }
}
}
4

2 回答 2

3
  • NSLog 不起作用,因为返回在您到达此行之前生效,并且永远不会执行。

将其更改为:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(self.segment.selectedSegmentIndex==0)
{
     NSLog(@"Nominals: %d",self.items.count);
    return [self.items count];
}
if(self.segment.selectedSegmentIndex==1)
{
   NSLog(@"Coinage: %d",self.coinageArr.count);
    return [self.coinageArr count];
}
//return 0; Complains about no return.
}
  • 您能否显示更改 UISegmentedControl 时调用的方法?
  • 请注意,您不需要设置 2 个 if 语句,您可以使用else.
  • 正如@Ryan 所说,您应该[tableview reloadData]在 UISegmentedControl 更改中使用。那么如果你 在你的方法中改变self.items数组并且不做任何改变就更好了,所以它看起来像这样:valueChangednumberOfRowsInSection

      - (void)valueChanged:(id)sender
      {
        if(self.segment.selectedSegmentIndex==0)
        {
            self.items = what ever
        }else{
            self.items = what ever
        }
        [tableview reloadData];
       }
    
        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
         return [self.items count];
       }
    

祝你好运

于 2012-08-15T18:23:14.780 回答
1

更改 UISegmentedControl 的值后,您需要更新表。你可以很容易地做到这一点,[tableView reloadData];或者你可以使用类似的东西[tableView reloadSection:0 withTableViewAnimation:UITableViewRowAnimationAutomatic];

执行此操作的最佳位置可能是您的控件的 valueChanged 方法。

// Wherever you init your UISegmentedControl
segmentedControl addTarget:self selector:@selector(valueChanged:) forEvent:UIControlEventValueChanged];

- (void)valueChanged:(id)sender
{
    [tableview reloadData];
}
于 2012-08-15T18:24:12.740 回答