Can someone please show me an example of in-place editing of UITableView cell...I am aware of UITableView delegate methods like cellForRowAtIndexPath,...etc
But I do not
This is very old.. and probably needs a more recent answer.. I just had this problem and hacked together something.. maybe someone finds it useful..
I created a Table View Controller that adds a message box add the end of an "item list" thats stored in NSUserDefaults... Item
//
// MyItemListTVC.m
// Best10
//
// Created by Francois Chaubard on 12/26/13.
// Copyright (c) 2013 Chaubard. All rights reserved.
//
#import "MyItemListTVC.h"
#import "AppDelegate.h"
@interface MyItemListTVC ()
@property (strong, nonatomic) UIRefreshControl IBOutlet *refreshControl;
@property (strong,nonatomic) UIBarButtonItem *addButton;
@property (strong,nonatomic) UITextView *messageBox;
@end
@implementation MyItemListTVC
@synthesize refreshControl;
@synthesize itemList;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.itemList=[(AppDelegate *)[UIApplication sharedApplication].delegate getitems];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
self.addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.addButton.enabled = false;
//UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save:)];
[self.navigationItem setRightBarButtonItems:@[self.addButton] animated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)insertNewObject:(id)__unused sender
{
NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:self.itemList];
self.itemList = nil;
[self.tableView reloadData];
[temp addObject:self.messageBox.text];
[[NSUserDefaults standardUserDefaults] setObject:temp forKey:@"items"];
self.itemList=[(AppDelegate *)[UIApplication sharedApplication].delegate getitems];
self.messageBox = nil;
self.addButton.enabled = NO;
[self.tableView reloadData];
[self.tableView setNeedsDisplay];
[CATransaction flush];
}
- (void) save:(id)__unused sender {
}
#pragma mark - Table View
- (NSInteger)tableView:(UITableView *)__unused tableView numberOfRowsInSection:(NSInteger)section
{
return [self.itemList count]+1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
if (indexPath.row ==[self.itemList count] ) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MessageBox Cell"];
UITextView *messageBox= [[UITextView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 100)];
cell.userInteractionEnabled=YES;
messageBox.delegate=self;
[messageBox setEditable:YES];
[messageBox setUserInteractionEnabled:YES];
messageBox.editable=YES;
messageBox.font = cell.textLabel.font;
messageBox.textAlignment = NSTextAlignmentCenter;
messageBox.textColor = [UIColor grayColor];
messageBox.text = @"insert new activity";
self.messageBox = messageBox;
[cell addSubview: messageBox];
}else{
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
[self configureCell:cell atIndexPath:indexPath];
}
return cell;
}
- (BOOL)tableView:(UITableView *)__unused tableView canEditRowAtIndexPath:(NSIndexPath *)__unused indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (void)tableView:(UITableView *)__unused tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ((editingStyle == UITableViewCellEditingStyleDelete)&&([self.itemList count]>indexPath.row)) {
NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:self.itemList];
[temp removeObjectAtIndex:indexPath.row];
[[NSUserDefaults standardUserDefaults] setObject:temp forKey:@"items"];
self.itemList=[(AppDelegate *)[UIApplication sharedApplication].delegate getitems];
[self resignFirstResponder];
[self.tableView reloadData];
}
}
- (BOOL)tableView:(UITableView *)__unused tableView canMoveRowAtIndexPath:(NSIndexPath *)__unused indexPath
{
// The table view should not be re-orderable.
return YES;
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
if ([self.itemList count] > 0){
cell.textLabel.text = [self.itemList objectAtIndex:indexPath.row];
}
}
#pragma mark - UITextViewDelegate
- (void)textViewDidBeginEditing:(UITextView *)textView {
textView.text = @"-ing";
[self.messageBox setSelectedTextRange:[self.messageBox textRangeFromPosition:[self.messageBox positionFromPosition:self.messageBox.beginningOfDocument offset:1] toPosition:self.messageBox.beginningOfDocument]];
}
-(void)textViewDidChange:(UITextView *)textView
{
if (textView.text.length > 4) {
self.addButton.enabled=YES;
}else{
self.addButton.enabled=NO;
}
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ((indexPath.row ==[self.itemList count] ) ) {
return UITableViewCellEditingStyleNone;
}else{
return UITableViewCellEditingStyleDelete;
}
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([text isEqualToString:@"\n"]) {
if (textView.text.length > 4) {
[self insertNewObject:textView.text];
}
[self resignFirstResponder];
return NO; // or true, whetever you's like
}else if((textView.text.length-range.location)<4){
return NO;
}
if (textView.text.length > 4) {
self.addButton.enabled=YES;
}else{
self.addButton.enabled=NO;
}
return YES;
}
@end