まず第一に、そのようなトピックを既に投稿している人がいることは知っていますが、それらのトピックすべてについて明確な回答をした人はいません。
アプリケーションにsettings-UITableViewがあります。次に、UIPickerViewでいくつかの数値から選択できるTableViewCellを追加します。
TableViewのdidSelectRowAtIndexPathメソッドで、右のセルのifステートメントを作成しました
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 1){
}
}
このセルにUIPickerViewを追加するにはどうすればよいですか?下から上にスライドし、「完了」ボタンのようなものがあればいいでしょう。
これは他の質問にも基づいているため、ここにもそれらの機能(スイッチなど)を含めています。
あなたのYourTableViewController.h
セットする:
@interface YourTableViewViewController : UITableViewController <UIPickerViewDataSource, UIPickerViewDelegate>
あなたのYourTableViewController.m
このコードを貼り付けます:
@interface YourTableViewViewController ()
@property NSInteger toggle;
@property (strong, nonatomic) UIPickerView *pickerView;
@end
@implementation YourTableViewViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.toggle = 0;
self.pickerView = [[UIPickerView alloc] initWithFrame:(CGRect){{0, 0}, 320, 480}];
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
self.pickerView.center = (CGPoint){160, 640};
self.pickerView.hidden = YES;
[self.view addSubview:self.pickerView];
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return 2;
}
- (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];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
if(indexPath.row == 0)
{
[cell.contentView addSubview:self.mySwitch];
}
if(indexPath.row == 1)
{
cell.textLabel.textColor = [UIColor darkGrayColor];
if(self.toggle == 0)
{
cell.textLabel.text = @"Choose a number";
}
else
{
cell.textLabel.text = @"Cancel";
}
}
// Configure the cell...
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 1)
{
if(self.toggle == 0)
{
self.toggle = 1;
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:YES];
[self bringUpPickerViewWithRow:indexPath];
}
else
{
self.toggle = 0;
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:YES];
[self hidePickerView];
}
}
}
- (void)bringUpPickerViewWithRow:(NSIndexPath*)indexPath
{
UITableViewCell *currentCellSelected = [self.tableView cellForRowAtIndexPath:indexPath];
[UIView animateWithDuration:1.0f
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut
animations:^
{
self.pickerView.hidden = NO;
self.pickerView.center = (CGPoint){currentCellSelected.frame.size.width/2, self.tableView.frame.Origin.y + currentCellSelected.frame.size.height*4};
}
completion:nil];
}
- (void)hidePickerView
{
[UIView animateWithDuration:1.0f
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut
animations:^
{
self.pickerView.center = (CGPoint){160, 800};
}
completion:^(BOOL finished)
{
self.pickerView.hidden = YES;
}];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
self.toggle = 0;
[self.tableView reloadData];
[self hidePickerView];
NSLog(@"row selected:%ld", (long)row);
}
- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [NSString stringWithFormat:@"%d", row+1];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return 10;
}
@end
Tested.
補遺:
また、ストーリーボードで、separator
のYourTableView
をNoneに変更します(ここでは、見栄えが良くなります)。
テーブルビューセパレータ:
viewDidLoad
に追加:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
そしてbringUpPickerViewWithRow
後:
UITableViewCell *currentCellSelected = [self.tableView cellForRowAtIndexPath:indexPath];
追加:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableView setNeedsDisplay];
そして最後に、hidePickerView
に以下を追加します。
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
[self.tableView setNeedsDisplay];
IOS 7でリリースされた DateCell というサンプルプログラムを見たことはありますか? UIDatePickerを使用していますが、通常のUIPickerViewに適合させるのはかなり簡単です。
それはまさにあなたが説明していることを行います:編集している行の直下に開くピッカーでUITableViewCellを編集します。
上記の手順を同じ目的で実行しました。必要に応じて、UIPickerViewと完了ボタンを含むカスタムコントローラーを送信できます。