2

classA と classB の 2 つのクラスがあります。classA には、必要に応じて機能し、更新されるテーブルビューがあります。すべてのデリゲートとデータソースは問題なく、プロパティもあります@property (nonatomic, retain) UITableView *myTableView;

reloadDataclassAのviewDidAppearやviewWillAppearは入れたくない。[myTable reloadData]classBから発射したい。

ありがとう

4

7 に答える 7

16

デリゲートを使用してテーブルビューをリロードします。

テーブルビューがあるクラスで、これをviewDidLoadに記述します。

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateLeftTable"
                                              object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(checkRes:) name:@"updateLeftTable" object:nil];

次に、同じクラスで次のようにその関数を実装します。

-(void)checkRes:(NSNotification *)notification
{
   if ([[notification name] isEqualToString:@"updateLeftTable"])
   {
      [_rearTableView reloadData];
   }
}

最後に、テーブルビューをリロードするクラスに次の行を貼り付けます(この行がテーブルビューをリロードするメソッドに含まれることが重要です)。

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateLeftTable" object:self];

何か問題があれば教えてください。

于 2013-02-20T12:02:38.153 に答える
1
    ClassB.h

    @protocol ClassBDelegate <NSObject>

    -(void)reloadTableView;


    @end

    @property (nonatomic,weak)id<ClassBDelegate>delegate;


    ClassB.m

    -(void)methodForReloadingTableViewInClassA
    {

    [self.delegate reloadTableView];

    }




Class A.h
#import ClassB.h
@interface ClassA : UITableViewController<UITableViewDelegate,UITableViewDatasource,ClassBDelegate>
{
}

ClassA.m   
-(void)createClassB
{
    ClassB *obj = [[ClassB alloc]init];
    obj.delegate = self;
}

    //delagte method of class B
    -(void)reloadTableView
    {

    [self.tableView reloadData];

    }
于 2013-02-20T12:14:03.717 に答える
0

UITableView電話をかけた時点であなたの財産が有効であるかどうかを確認してくださいreloadDataUIViewControllerを呼び出すことによって作成されalloc initますが、ビューは現在無効な状態です。コードのreloadData行にブレークポイントを設定し、.tableView == nilかどうかを確認しますか?

于 2013-02-20T12:34:38.020 に答える
0

デリゲートでリロードする必要があると思います。

ここに ClassB.h ここにデリゲートを追加する必要があります

@property (nonatomic, strong) id myDelegate;

ここであなたの ClassA.m ClassB に行くときは、彼のデリゲート t ClassA を見せてください

ClassB *goNext = [[ClassB alloc] initWithNibName:@"ClassB" bundle:nil];
goNext.myDelegate = self; // ALL YOUR BASE ARE BELONG TO US!
[self.navigationController pushViewController:goNext animated:YES];

次。classA tableView をリロードする場合は、次のようなコードを使用します。

if (myDelegate && [myDelegate respondsToSelector:@selector(reloadMyTV)]){
        [myDelegate performSelector:@selector(reloadMyTV) withObject:nil];
    }

ここで、「reloadMyTV」は ClassA のメソッドです。

-(void) reloadMyTV {
[myTableView reloadData];
}

代議員を十分に覚えていることを願っています)私は記憶によってそれを書きました))それが役立つことを願っています

于 2013-02-20T12:00:38.853 に答える
0

ドキュメントから:

効率を高めるため、テーブル ビューには表示されている行のみが再表示されます。

そのため、tableView表示されていない場合は更新されません。

于 2013-02-20T12:01:09.163 に答える
0

reloadData メソッドを呼び出すと、メソッドが呼び出されるとすぐにデータが更新されます。reloadData を呼び出す前に、データ ソース (配列またはディクショナリ、または値を保存した場所) が変更されていることを確認してください。

そして、メインスレッドでデータをリロードしてみてください: [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

于 2013-02-20T12:17:24.603 に答える