iOS如何从另一个类访问[tableView reload Data]

时间:2014-02-12 13:58:28

标签: ios iphone objective-c tableview

我有一个viewController,它有一个属性:UIScrollView,同一个控制器包含一个tableView。我的UIScrollView包含按钮。如何使用[tableView reloadData]触摸其中一些按钮? tableView数据源和委托在viewController上。

MyViewController:

@property (strong, nonatomic) MyScrollView* scrollView; 
@property (strong, nonatomic) IBOutlet UITableView *table; 

MyScrollView类:

没有以编程方式创建属性和5个按钮。

4 个答案:

答案 0 :(得分:3)

在更好地理解你想要做什么后,我想我会使用代表。虽然还有其他方法可以做到这一点,但我认为代表们很灵活,如果你还没有使用它们,那么这是了解它们的好时机。

如果希望采用我们的协议,我们定义一个类需要实现的委托方法: 的 MyScrollView.h

@protocol MyScrollViewDelegate <NSObject>
-(void)reloadTableData;
@end

@interface MyScrollView : UIScrollView
@property (nonatomic,weak) id<MyScrollViewDelegate> delegate;
@end

然后在实施中我们执行以下操作:

<强> MyScrollView.m

// Set the button's target
[button addTarget:self action:@selector(reloadData) forControlEvents:UIControlEventTouchUpInside];

// Here we check if our delegate responds to the reloadTableData selector and if so we call it
-(void)reloadData
{
    if ([self.delegate respondsToSelector:@selector(reloadTableData)])
    {
        [self.delegate reloadTableData];
    }
}

在MyViewController的实现中,我们添加MyScrollViewDelegate并实现reloadTableData方法:

<强> MyViewController.m

@interface MyViewController () <MyScrollViewDelegate>
@property (strong, nonatomic) MyScrollView* scrollView; 
@property (strong, nonatomic) IBOutlet UITableView *table; 
@end

// Set the delegate after you've created scrollView
self.scrollView.delegate = self;

// Once the delegate is called we simply reload the table data
-(void)reloadTableData
{
    [self.table reloadData]
}

答案 1 :(得分:0)

如果您的视图控制器包含两者表视图和带有多个按钮的滚动视图,您只需将表视图连接到也被声明为属性的IBOutlet,然后调用“{ {1}}“在该表视图属性上。

如果表视图位于包含按钮的对象的不同视图控制器或类中,则只需要指向包含表视图的单独视图控制器的某种指针。如果该表视图被声明为属性,您仍然可以通过执行类似“reloadData”的操作来重新加载数据(假设该属性名为tableView,而指向另一个VC的指针名为theOtherViewController)。

答案 2 :(得分:0)

请按照以下方式重新加载表格数据

.h文件

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{
    IBOutlet UITableView *exTable1;
    IBOutlet UITableView *exTable2;
}
@property (nonatomic, retain) UITableView *exTable1;
@property (nonatomic, retain) UITableView *exTable2;

给予.xib

的关系

.m文件

@synthesize exTable1;
@synthesize exTable2;

// reload data when you need 
[self.exTable1 reloadData];

// reload data when you need 
[self.exTable2 reloadData];

答案 3 :(得分:0)

这很简单 -

viewController.m

// set up an action for your button
-(IBAction)yourButtonClick{

   [yourtablename reloadData];

   }