#iphone #objective-c #cocoa-touch
#iPhone #objective-c #cocoa-touch
Вопрос:
Я все еще испытываю трудности со страницей регистрации в моем приложении для iphone — на данный момент у меня проблемы с полем «Пол».
Моя идея заключалась в том, что когда пользователь нажимает на поле «Пол», табличное представление, содержащее «Мужчина» и «Женщина», скользит снизу вверх, а затем пользователь ставит галочку рядом со своим фактическим полом. Я не совсем понимаю, как правильно получить это представление гендерной таблицы.
В настоящее время у меня есть моя ячейка GenderTableViewCell, которая указывает как на ярлык с поддержкой взаимодействия с пользователем, так и на GenderTableViewController, а затем я установил представление ввода первого в табличное представление последнего. Таким образом, таблица с «Male» и «Female» на самом деле скользит вверх при нажатии на поле gender, но поскольку таблица не сгруппирована, как я указал в GenderTableViewController.xib, у меня такое чувство, что я не на правильном пути!!
Я гуглил и гуглил, но не смог найти никаких похожих примеров — может быть, нехорошо, когда табличное представление скользит вверх? Должен ли я использовать UIPicker вместо этого?
Ответ №1:
Вместо этого я бы использовал UIPicker. Это будет намного проще реализовать, и это гораздо более стандартный интерфейс для пользователя.
Комментарии:
1. Боюсь, мне не кажется, что использовать представление выбора проще. Я не понимаю, как я могу заполнить средство выбора двумя полами из ячейки моей гендерной таблицы?
2. Вам нужен класс для реализации протокола UIPickerViewDataSource и протокола UIPickerViewDelegate . Вероятно, вы можете заставить свой контроллер представления реализовать их оба, если хотите, поскольку это простое средство выбора. Здесь есть простое руководство.
3. Большое вам спасибо за комментарий по этому поводу. Единственный контроллер, который у меня в настоящее время есть, — это контроллер табличного представления, управляющий как именем пользователя, датой рождения, полом, номером мобильного телефона, так и ячейкой таблицы паролей, где каждая из этих ячеек является экземпляром некоторого подкласса UITableViewCell. Мне кажется немного странным, если я теперь сделаю этот общий контроллер представления таблицы источником данных, например, средства выбора пола внутри пользовательской ячейки представления таблицы пола?
4. Вам ни в коем случае не нужно делать контроллер табличного представления источником данных и делегировать его для средства выбора. Вы, конечно, можете создать свой собственный класс, который реализует только эти протоколы, если хотите (вы могли бы даже сделать еще один шаг вперед и создать объект источника данных И объект делегата, если вам так хочется). Это намного чище и лучше с точки зрения разделения кода.
5. Я согласен, но, похоже, мне не очень повезло в том, чтобы это произошло. В ячейке моей гендерной таблицы в настоящее время есть,
IBOutlet UIPickerView *genderPicker
чей источник данных и делегат я подключил к экземпляру моегоGenderPickerController
(соответствует обоимUIPickerViewDataSource
иUIPickerViewDelegate
) в Interface Builder. Я добавил один из этих желтых контроллеров представления и выбрал классGenderPickerController
в инспекторе идентификации. Однако это не работает … и не вижу, как подключить материал по-другому : (
Ответ №2:
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
[tableView setBackgroundColor:[UIColor clearColor]];
[tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
return 2;
}
-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
return 1;
}
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 35;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexpath // set row value for table
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"anycell"];
if(cell == nil)
{
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"anycell"] autorelease];
/// UIImageView *imgView=[[[UIImageView alloc] init] autorelease];
// UIImage *img;
CGRect frame;
frame.origin.x=10;
frame.origin.y=5;
frame.size.width=280;
if(indexpath.section ==0)
{
//img=[UIImage imageNamed:@"textbox1.png"];
frame.size.height=27;
txtname=[[UITextField alloc] initWithFrame:frame];
txtname.delegate=self;
txtname.textColor=[UIColor colorWithRed:211.0/255 green:236.0/255.0 blue:245.0/255.0 alpha:1.0];
txtname.placeholder=@"User Name";
[txtname setAutocorrectionType:UITextAutocorrectionTypeNo];
[txtname setKeyboardType:UIKeyboardTypeURL];
[cell.contentView addSubview:txtname];
}
else if(indexpath.section == 1)
{
frame.size.height=27;
txtpassword=[[UITextField alloc] initWithFrame:frame];
txtpassword.delegate=self;
txtpassword.textColor=[UIColor colorWithRed:211.0/255 green:236.0/255.0 blue:245.0/255.0 alpha:1.0];
txtpassword.secureTextEntry=TRUE;
txtpassword.placeholder=@"Password";
[cell.contentView addSubview:txtpassword];
}
else
{
frame.size.height=27;
//frame.size.width=200;
btnSave=[[UIButton alloc] initWithFrame:frame];
[btnSave setImage:[UIImage imageNamed:@"user-save.png"] forState:UIControlStateNormal];
[btnSave addTarget:self action:@selector(saveClicked) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:btnSave];
}
}
if(indexpath.section == 0)
txtname.text=appDelegate.setObj.username;
else if(indexpath.section == 1)
txtpassword.text=appDelegate.setObj.password;
UIImageView *imgView=[[[UIImageView alloc] init] autorelease];
imgView.image=[UIImage imageNamed:@"textbox1.png"];
cell.backgroundView =imgView;
cell.selectionStyle=UITableViewCellSelectionStyleNone;
return cell;
}
Комментарии:
1. Спасибо за ответ! Я не уверен, как это помогает мне в выборе пола? :}
2. Просто используйте это с UISegementControl