3

テーブルビューコントローラにセグメントがあります。

segmentIndex =0->tableViewが読み込まれます->タップします。別のtableViewControllerに移動します。segmentIndex =1->tableViewが読み込まれます->タップします。別のtableViewControllerに移動します。

テーブルビューの切り替えは正常に行われます。問題は、戻った後、前のインデックス値を覚えておく必要があることです。それを実装する方法は?私の現在のコード:

- viewWillAppear
self.segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Nominals",@"Coinage",nil]];
[self.segment setFrame:CGRectMake(80, 0, 200, 30)];
[self.segment setSegmentedControlStyle:UISegmentedControlStyleBar];
//self.segment.selectedSegmentIndex=0;
[self.segment addTarget:self action:@selector(segmentValueChaged:) forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:self.segment];


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

よろしくお願いします。

編集:

self.segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Nominals",@"Coinage",nil]];
[self.segment setFrame:CGRectMake(80, 0, 200, 30)];
[self.segment setSegmentedControlStyle:UISegmentedControlStyleBar];
if(!self.segmentIndex)
{
    self.segment.selectedSegmentIndex=-1;
}
else 
{
    self.segment.selectedSegmentIndex=self.segmentIndex;
}

//self.segment.selectedSegmentIndex=self.segmentIndex;
[self.segment addTarget:self action:@selector(segmentValueChaged:) forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:self.segment];


-(void)viewWillDisappear:(BOOL)animated
{
switch (self.segment.selectedSegmentIndex) 
{
    case 0:
    {
        self.segmentIndex=0;
        break;
    }
    case 1:
    {
        self.segmentIndex=1;
        break;
    }
}

}
4

2 に答える 2

3

値をに保存viewWillDisappearし、コントローラーに戻ったときに、viewWillAppear保存した値を元に戻します。したがって、値をに設定することから始めることもできます...たとえば-1とします。値が-1の場合viewWillAppearはデフォルト値を設定し、そうでない場合はその値を使用します。

- (void)viewWillAppear:(BOOL)animated {
    self.segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Nominals",@"Coinage",nil]];
    [self.segment setFrame:CGRectMake(80, 0, 200, 30)];
    [self.segment setSegmentedControlStyle:UISegmentedControlStyleBar];

    if (self->_currentIndex == -1) {
        NSInteger myDefaultValue = 0;
        self.segment.selectedSegmentIndex=myDefaultValue;
    } else {
        self.segment.selectedSegmentIndex=self->_currentIndex;
    }

   [self.segment addTarget:self action:@selector(segmentValueChaged:) forControlEvents:UIControlEventValueChanged];
   [[self navigationItem] setTitleView:self.segment];
}

また、コントローラーが消えようとしているときに値を保存する必要があります。

- (void)viewWillDisappear:(BOOL)animated {
    self->_currentIndex = self.segment.selectedSegmentIndex;
}

NSInteger _currentIndex;インターフェースで定義した場所

于 2012-04-30T16:28:18.307 に答える
2

インデックス値をNSUserDefaultsに格納し、後で戻ったときにviewWillAppearで、 NSUserDefaultsから整数値を取得し、取得した整数値に応じて選択または選択解除されたインデックスを作成できます。

例えば:

-(IBAction)segmentValueChaged:(id)sender
 {
      switch (self.segment.selectedSegmentIndex)
      {
         case 0:
         { 
              // --some code--
              break;   
         }

         case 1  
         {
              //--some code--
              break;

          }  
         default:
          break;
       }

//選択したインデックスを次のようにNSUserDefaultsに保存します。//
共有デフォルトオブジェクトを取得します。

**NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];**

//インデックスを保存します。

**[settings setInteger:self.segment.selectedSegmentIndex forKey:@"MySelectedValueKey"];**

}  

そして、viewWillAppearでは、NSUserDefaultsから値を取得できます。それが選択されるインデックスです。

    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
    if([settings objectForKey:@"MySelectedValueKey"] == 0)   
    {
      //Set up for index 0
    }

    if([settings objectForKey:@"MySelectedValueKey"] == 1)   
    {
       //Set up for index 1  
    }  

お力になれて、嬉しいです :)

于 2012-04-30T17:20:33.633 に答える