デフォルトで選択されている行を設定するにはどうすればよいですか?行を選択し、選択した行の番号をindexpath.row
そして、テーブルをリロードして、選択された行を選択します。誰かが私を助けてくれますか?メソッド-(IBAction
)segmentedControlIndexChanged
で選択した行を取得できますか? didSelectRowAtIndexPath
にありませんか?
あなたが理解するのに役立つなら、これは私のコードです
- (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] autorelease];
}
//lbl1 = [[UILabel alloc]initWithFrame:CGRectMake(200, 10, 100, 20) ];
// Configure the cell...
NSString *depdateChoosed=[deparatureDates objectAtIndex:depSelectedIndice];
NSString *comeateChoosed=[deparatureDates objectAtIndex:comSelectedIndice];
NSString *choosedDate =[NSString stringWithFormat:@"%@%@",depdateChoosed, comeateChoosed];
NSLog(@"date choisi %@ ",choosedDate);
if(segment.selectedSegmentIndex==0)
{
cell.textLabel.text =[deparatureDates objectAtIndex:indexPath.row];
}
else if(segment.selectedSegmentIndex==1) {
//cell.textLabel.text =[goingBackDates objectAtIndex:indexPath.row];
//cell.textLabel.text=[goingBackDates objectAtIndex:indexPath.row];
cell.textLabel.text =[goingBackDates objectAtIndex:indexPath.row];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@" champ séléctionner : %d ",indexPath.row);
if(segment.selectedSegmentIndex==0)
{
depSelectedIndice=indexPath.row;
}
else if(segment.selectedSegmentIndex==1) {
comSelectedIndice=indexPath.row;
}
//[tableView reloadData];
}
-(IBAction) segmentedControlIndexChanged
{
int i;
switch (self.segment.selectedSegmentIndex)
{
case 0:
i=0;
[tableView reloadData];
break;
case 1:
i=1;
NSLog(@"dexieme segment selectionner");
[tableView reloadData];
default:
break;
}
}
NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
現在選択されている行のNSIndexPath
を提供します。その後、できます
[tableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionMiddle];
後でその行を選択します(そして画面の中央に表示します)。
私は同じ質問をしました、そして、これは私がそれをした方法です:
tableViewController
で、この関数にこれを追加します
(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 'the row you want to select')
{
[tableView
selectRowAtIndexPath:indexPath
animated:TRUE
scrollPosition:UITableViewScrollPositionNone
];
[[tableView delegate]
tableView:tableView
didSelectRowAtIndexPath:indexPath
];
}
}
これはそれを行います:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];
ここで、行は選択するセル番号(0 ...から始まります)、セクションはセルが表示されるセクションです。
これは、UITableViewで行を事前選択する方法です。
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];
IndexPathを選択する行に設定し、上記のようにメソッドを呼び出します。
私はこの質問がかなり古い(2011年)ことを認識していますが、(私のような)誰かがこの問題を検索してこの質問に出くわした場合に備えて、最新の回答も投稿するためです。
IOS 9では、AppleはUITableView
を大幅に改善しました。テーブルがリロードされてもフォーカスが失われないようにするには、次のようにします。
tableView.remembersLastFocusedIndexPath = Yes;
そして、それは「魔法のように動作します」。
さらに良いことに、実装する
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView
UITableViewDelegate
で、最初に画面に描画されたときに選択したい行をテーブルに知らせる。
IOS 9以前は、通常、自分でreloadData
メソッドを記述するだけでした。このメソッドは、現在選択されている行を取得し、テーブルをリロードしてから再度選択します。 UITableViewController
で、またはreloadData
を直接呼び出すコードを防ぐことができなかったテーブルで作業する必要がある場合、UITableViewをサブクラス化し、reloadData
をオーバーライドしました(ちょっと、委任推奨される方法ですが、iOSでもサブクラス化してオーバーライドする必要がある場合があります)。
次のコードを使用して、テーブルビューで選択した行を取得します。 :)
NSArray *selectedRows=[tableView indexPathsForSelectedRows];
NSMutableArray *rownumberArray=[[NSMutableArray alloc]init];
for (int i=0; i<selectedRows.count; i++) {
NSIndexPath *indexPath = [selectedRows objectAtIndex:i];
NSInteger row = indexPath.row;
NSNumber *number = [NSNumber numberWithInteger:row];
[rownumberArray addObject:number];
}
// rownumberArrayには、選択したセルの行番号が含まれます。