Expanding and collapsing UITableViewCells with DatePicker
I assume you're using storyboard, the example is with UIPickerView
:
Create a tableviewcell right under the cell that contains the textfield you want to fill and set the cells row height to 216.0 in the inspector and add a UIPickerView to that cell.
Next connect the UIPickerView via Outlet to your viewcontroller and add the following property to your ViewController.h:
@property (weak, nonatomic) IBOutlet UIPickerView *statusPicker;
@property BOOL statusPickerVisible;
In your ViewController.m do in viewWillAppear
self.statusPickerVisible = NO;
self.statusPicker.hidden = YES;
self.statusPicker.translatesAutoresizingMaskIntoConstraints = NO;
Add two methods:
- (void)showStatusPickerCell {
self.statusPickerVisible = YES;
[self.tableView beginUpdates];
[self.tableView endUpdates];
self.statusPicker.alpha = 0.0f;
[UIView animateWithDuration:0.25
animations:^{
self.statusPicker.alpha = 1.0f;
} completion:^(BOOL finished){
self.statusPicker.hidden = NO;
}];];
}
- (void)hideStatusPickerCell {
self.statusPickerVisible = NO;
[self.tableView beginUpdates];
[self.tableView endUpdates];
[UIView animateWithDuration:0.25
animations:^{
self.statusPicker.alpha = 0.0f;
}
completion:^(BOOL finished){
self.statusPicker.hidden = YES;
}];
}
In heightForRowAtIndexPath
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height = self.tableView.rowHeight;
if (indexPath.row == 1){
height = self.statusPickerVisible ? 216.0f : 0.0f;
}
return height;
}
In didSelectRowAtIndexPath
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
if (self.statusPickerVisible){
[self hideStatusPickerCell];
} else {
[self showStatusPickerCell];
}
}
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Collapsable Table Cells [Swift 3]
It's very simple; you are probably over-thinking things here. This functionality is built in; Apple wants you to be able to expand and contract a cell. You just aren't using the API Apple has provided. Use it! Here's how.
The date picker cells are always present. But their height is zero (and their clipsToBounds
is true
) so you don't see them. So implement heightForRowAtIndexPath
to return zero for those cells.
To show a date picker cell, change what heightForRowAtIndexPath
returns (this is easiest if you have a property that holds this value, so you can just change the property value and have heightForRowAtIndexPath
read it from there) and say:
self.tableView.beginUpdates()
self.tableView.endUpdates()
That's all there is to it!
Here's a quick demo I made. The red and orange things are cells. The table has three cells but the second one, containing the date picker, starts out with zero height:
Datepicker won't display in custom UITableViewCell class
Can you remove the following code from viewDidLoad() and ensure you have set reuse identifier of custom tableviewcell as "startDateCell" in storyboard and try again?
self.timeTableView.register(startDateCell.self,
forCellReuseIdentifier: "startDateCell")
Expandable UITableView cells showing datas
You don't even need to use expandable/accordion in this case. Here is how you can tackle this. Lets says your cell size when normal is 40 and when particular clicked is 100. In heightForRowAtIndexPath you can check which cell is selected and return more height
if(selectedRow == indexPath.row) {
return 100;
} else {
return 40;
}
Then what you can do is in didSelectRowAtIndexPath or a clickEvent method
[self.tableView beginUpdates];
[[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: selectedRow inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
So it will be your cell will be rendered all of it but based on height you are hiding or showing content.
Updated Answer with Enter Source
ViewController.m
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(selectedIndex == indexPath.row)
return 100;
else
return 40;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
customCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
NSDictionary *matches = self.dataArray[indexPath.row];
cell.matchName.text = [matches objectForKey@"MatchName"];
if() {
cell.heightConstraintSecondView.constant = 0;
} else {
cell.heightConstraintSecondView.constant = 59;
cell.team1.text = [matches objectForKey@"Team1"];
cell.team2.text = [matches objectForKey@"Team2"];
cell.score.text = [matches objectForKey@"Score"];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
selectedIndex = indexPath.row;
[self.tableView beginUpdates];
[[self tableView] reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
}
}
iOS 7 - How to display a date picker in place in a table view?
With iOS7, Apple released the sample code DateCell
.
Demonstrates formatted display of date objects in table cells and use of UIDatePicker to edit those values.
As a delegate to this table, the sample uses the method "didSelectRowAtIndexPath" to open the UIDatePicker control.For iOS 6.x and earlier, UIViewAnimation is used for sliding the UIDatePicker up on-screen and down off-screen. For iOS 7.x, the UIDatePicker is added in-line to the table view.
The action method of the UIDatePicker will directly set the NSDate property of the custom table cell. In addition, this sample shows how to use NSDateFormatter class to achieve the custom cell's date-formatted appearance.
You can download the sample code here: DateCell.
Related Topics
Xcode 7 Supporting Watch Os1 and Os2
How to Get Word Wrap Information with the New iOS 7 APIs
How to Observe Changes in Userdefaults
Error: Uicollectionview Must Be Initialized with a Non-Nil Layout Parameter
How to Get Core Data Object from Specific Object Id
Contentview Not Indenting in iOS 6 Uitableviewcell Prototype Cell
Find Current Country from iPhone Device
Setting Constraints Programmatically
How to Play Video Stream with Mpmovieplayercontroller in iOS
Split View Controller Must Be Root View Controller
Sbstatusbarcontroller Instance
Aes/Cbc/Pkcs5Padding in iOS Objective C Result Differs from Android
Swift Override Function in Extension
How to Present View Controller from Right to Left in iOS Using Swift
Hide Keyboard When Scroll Uitableview