0

UITableviewcell のサブクラスに IBaction があり、テーブルビューのデータをリロードするのに苦労しています。シンプルに見えますが、多くのスタッフを試しましたが、何も機能しませんでした。

以下は、UITableviewcell で使用しているコードですが、何もリロードされません。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (IBAction)deleterow:(id)sender
{
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Delete content ?"
                                                      message:@"Do you want to delete ?"
                                                     delegate:self
                                            cancelButtonTitle:@"Cancelar"
                                            otherButtonTitles:@"Eliminar", nil];
    [message show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

    if ([title isEqualToString:@"Eliminar"])
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);        
        NSString *documentsDirectory = [paths objectAtIndex:0];        
        NSString *path = [documentsDirectory stringByAppendingPathComponent:@"datatesting.plist"];
        libraryContent = [[NSMutableArray alloc] initWithContentsOfFile:path];
        [libraryContent removeObjectAtIndex:0];
        NSLog(@"delete the Row:%@",libraryContent);
        [libraryContent writeToFile:path atomically:YES];

        UITableView *parentTable = (UITableView *)self.superview;
        [parentTable reloadData];
    }
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
 }

 @end

UITableviewcell からデータをリロードする最良の方法は何ですか?

4

1 に答える 1

1

コードがどのように接続されているかは完全にはわかりませんが、通常、このような場合は、テーブルビューの参照をサブクラスのプロパティに渡すことにより、デリゲート パターンを使用する必要があります。

subclass *s = [subclass alloc] init];
s.table = self.tableview;

次に、親テーブルを参照する場合は、次のようにします。

[self.table reloadData];

または、実際に推奨されるアプローチであるプロトコル/デリゲートの組み合わせを使用します。このような:

サブクラスで:

@protocol subclassdelegate <NSObject>
- (void)refreshParentTableView;
@end

インターフェイスでデリゲートを設定する

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

次に、このように必要なときに呼び出します

[self.delegate refreshParentTableView];

ここで、親でいくつかのことを行う必要があります。サブクラスを呼び出し、self をデリゲート プロパティとして設定します。

subclass *s = [subclass alloc] init];
s.delegate = self;

次に、親クラスで、プロトコルで定義されたメソッドを実装します

- (void)refreshParentTableView {
     [self.tableview reloadData]
}

どちらのアプローチも機能しますが、プロトコル アプローチを使用することをお勧めします。これはモードコードですが、はるかに理解しやすく、おそらくより信頼性があります。

よくなって。

于 2012-08-15T05:40:42.870 に答える