ストーリーボードを介して作成された静的グループを含む 1 つのテーブル ビューがあります。チェック マークを使用して設定を変更したり、別の行を選択したりしたいのですが、プログラムまたは Xcode を介して行をチェックおよびチェック解除する方法がわかりません。
助けてください!
前もって感謝します!
ストーリーボードを介して作成された静的グループを含む 1 つのテーブル ビューがあります。チェック マークを使用して設定を変更したり、別の行を選択したりしたいのですが、プログラムまたは Xcode を介して行をチェックおよびチェック解除する方法がわかりません。
助けてください!
前もって感謝します!
UITableViewCellアクセサリタイプを変更します
選択するものについては、tableView:didSelectRowAtIndexPathで上記のプロパティを使用します。
を使用して行をマークまたはマーク解除できます
cell.accessoryType = UITableViewCellAccessoryCheckmark;
cell.accessoryType = UITableViewCellAccessoryNone;
上記のメソッドをdidSelectRowAtIndexPathに追加し、配列内のすべてのチェックを管理して、データをリロードします。
ビューをオンまたはオフにすることができますが、モデルをどこに保存していますか? 選択されている言語に関する情報を保存するために、どのプロパティを使用していますか?
選択している言語を保持するある種の列挙型データ型を用意し、それを.h
ファイルに含めることをお勧めします。
enum language {english, french};
@interface TesterProjectViewController : UIViewController
{
enum language selectedLanguage;
}
次に、あなたの言語をviewDidLoad:
デフォルトの言語として選択するかNSUserDefaults
、最後に選択した言語を選択します。
- (void)viewDidLoad
{
[super viewDidLoad];
self->selectedLanguage = english;
}
次に、関数UITableViewDelegate
とUITableViewDataSource
関数を使用して、選択する必要がある言語とUITableViewCell
アクセサリ ビューが必要な言語を追跡します。
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section==0)
{
switch (indexPath.row) {
case 0:
self->selectedLanguage = english;
break;
case 1:
self->selectedLanguage = french;
break;
default:
break;
}
}
[theTableView reloadData];
}
このdidSelectRowAtIndexPath:
メソッドは、モデルで使用している言語を設定するために使用されます。次に、cellForRowAtIndexPath:
メソッドを使用して VIEW をモデルに一致するように設定します。先に進んで にチェック マークを設定することもできますが、次のように、データがリロードされた場合に常に正しいようにdidSelectRowAtIndexPath:
に保持することをお勧めします。cellForRowAtIndexPath:
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *theCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
// You may set up the cell differently or do whatever setup you need here:
if(indexPath.section==0)
{
if(self->selectedLanguage == english && indexPath.row==0)
theCell.accessoryType = UITableViewCellAccessoryCheckmark;
else if(self->selectedLanguage == french && indexPath.row==1)
theCell.accessoryType = UITableViewCellAccessoryCheckmark;
else
theCell.accessoryType = UITableViewCellAccessoryNone;
}
//More cell setup can go here, or setup cells for different rows/sections.
return theCell;
}
また、他の人が指摘したように、UISwitch
「ラジオ」タイプの選択ではなく、各選択がオン/オフタイプの選択であるため、下部の通知選択に使用します。
これがお役に立てば幸いです。
フランス語/英語のセクションについては、デフォルトで 1 つチェックする必要があると思います。あなたの cellForRowAtIndexPath で:
if([cell.textLabel.text isEqualToString:@"English"])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
次に、セルがタップされるたびに、一方がタップされたことを確認し、もう一方のチェックを外す必要があります。
あなたのdidSelectRowAtIndexPathで
if(indexPath.section ==0 && indexPath.row ==0) {
UITableViewCell * otherCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
otherCell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else if(indexPath.section ==0 && indexPath.row ==1) {
UITableViewCell * otherCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
otherCell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
このコードを使用してください:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
}else{
thisCell.accessoryType = UITableViewCellAccessoryNone;
}
}
- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath
*)indexPath {
//add your own code to set the cell accesory type.
return UITableViewCellAccessoryNone;
}