使用 UIButton 从其他 UIViewController 中删除一行
Posted
技术标签:
【中文标题】使用 UIButton 从其他 UIViewController 中删除一行【英文标题】:Delete a row from other UIViewController with a UIButton 【发布时间】:2015-05-13 12:33:02 【问题描述】:我有一个问题,我有一个UITableViewController
,其中有一个列表,当我推动一行时,它会将我发送到另一个UIViewController
。
我也用prepareForSegue
方法实现了这个
- (void)tableView:(UITableView *)tableView commitEditingStyle:
当我滑动一行时正在删除。一切都很完美。
现在,我的问题是,我在UIViewController
中放置了一个 UIButton,并且我想在我按下它时删除来自UITableViewController
的行,该怎么做?
【问题讨论】:
如果我理解正确你希望当你点击行并推送到第二个控制器时,第一个控制器中的录音行应该被删除? 如果把UIButton
放在UIViewController
上,那有什么用呢?
当我点击行并推到第二个控制器时,当我点击按钮从第一个控制器中删除录制的行时......就在我点击按钮时......
UIButton
是在第二个视图控制器上还是在第一个视图控制器上?
当您删除数据时,它是否也会从您的数据库中删除?
【参考方案1】:
您可以使用委托,因为您想在两个视图控制器之间进行通信。
在 DetailViewController 中创建协议。当您最初从 TableViewController 切换到 DetailViewController 时,将“idx”设置为选定的 indexPath.row 或数组索引。
当你从 DetailViewController 中删除它时,delegate 会将索引发送到 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;
【讨论】:
【参考方案2】:commitEditingStyle:
调整您所查看内容的核心数据源。删除按钮应该以同样的方式调整核心数据。
看Apple's Documentation for creating and deleting managed objects。
如果您正在删除该行所代表的数据,并且在您推回 UITableViewController 时仍然查看该行,那么您需要刷新数据。
【讨论】:
不,commitEditingStyle 工作正常,我有两个 viewController,第一个是 UITableView,第二个是 UIViewController,第二个我有按钮,我希望当我按下行时删除我的行从 firstViewController 中选择并推回 tableList。 我还是不太明白你的语法,但我假设你想删除 UIViewController 正在显示的数据对象。commitEditingStyle
在后台执行此操作。我就是这么说的。您的删除 UIButton 需要从 UIManagedObjectContext 中删除您的 UIViewController 正在显示的对象。 [aContext deleteObject:aManagedObject];
会这样做。这是假设您在应用中使用 CoreData。
您在 UITableViewController 的哪个位置刷新显示的数据?
在 viewWillAppear 我放了一个 [self.tableView reloadData];
确保在主队列上刷新,并且在刷新之前将删除提交到对象上下文。 ***.com/questions/24939434/…以上是关于使用 UIButton 从其他 UIViewController 中删除一行的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIButton 从其他 UIViewController 中删除一行
如何从数组中过滤多个选定值并将其从 uibutton 加载到其他 uitableview
从 UITableViewCell 中的 UIButton 触发 Segue