我有一个问题,我有一个UITableViewController
,其中有一个列表,当我按下一行时,它会将我发送给另一个UIViewController
。
我用prepareForSegue
方法实现了这个,我也放了
- (void)tableView:(UITableView *)tableView commitEditingStyle:
当我滑动一行时正在删除。一切都很完美。
现在,我的问题是,我在UIViewController
中添加了一个UIButton,我希望当我按下这个来删除UITableViewController
中的行时,该怎么做?
答案 0 :(得分:2)
您可以使用委托,因为您希望在两个视图控制器之间进行通信。
在DetailViewController中创建协议。当您最初从TableViewController转换为DetailViewController时,将“idx”设置为选定的indexPath.row或数组索引。
当您从DetailViewController中删除它时,委托会将索引发送到TableViewController,您可以将其从主阵列中删除。
DetailViewController.h文件
#import <UIKit/UIKit.h>
@protocol DetailViewControllerDelegate <NSObject>
@optional
-(void) removeElementAt:(int )index;
@end
@interface DetailViewController : UIViewController{
IBOutlet UIButton *bttn;
id <DetailViewControllerDelegate> delegate;
}
@property (retain) int idx;
@property (retain) id delegate;
-(IBAction)bttnclicked;
-(IBAction)back:(id)sender;
@end
在DetailViewController.m文件中
#import "DetailViewController.h"
#import "TAbleViewController.h"
@interface DetailViewController ()
@end
@implementation DetailViewController
@synthesize idx,delegate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction)bttnclicked{
[[self delegate] removeElementAt:idx];
}
-(IBAction)back:(id)sender{
[self dismissViewControllerAnimated:YES completion:NULL];
}
@end
对于TableViewContoller.h文件
#import <UIKit/UIKit.h>
#import "DetailViewController.h"
@interface TableViewContoller : UIViewController <DetailViewControllerDelegate>
{
DetailViewController *secondview;
}
@end
在TableViewController.m文件中,
#import "TableViewController.h"
#import "DetailViewController.h"
@interface TableViewController ()
@end
@implementation TableViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) removeElementAt:(int )index
{
NSLog(@"Before object : %@",self.objects);
[self.objects removeObjectAtIndex:index];
//reload table at your convinience
NSLog(@"Removed object : %@",self.objects);
[self.tableView reloadData];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
DetailViewController *dc=[segue destinationViewController];
dc.idx = (int) indexPath.row;
dc.delegate = self;
}
}
答案 1 :(得分:0)
commitEditingStyle:
会调整您正在查看的核心数据源。删除按钮应以相同的方式调整核心数据。
请看Apple's Documentation for creating and deleting managed objects。
如果你正在删除数据,那么行会由你回到UITableViewController来表示并仍在查看行,那么你需要刷新数据。