1

storybordとUISegmentedControlにtableViewがあり、上記のテーブルにさまざまなデータとさまざまなデザインを入力できます。私の問題は、UISegmentedControlを切り替えたときにnumberOfRowsInSectionmethが反応しないことです。

- (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が変更されたときに呼び出すメソッドを表示できますか?
  • 使用できるifステートメントを2に設定する必要がないことに注意してください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 に答える