-1

UIViewControllerにテーブルがあり、UIViewであるサブビューもあります。UIViewControllerからUIViewにデータを渡そうとしていました:

MainViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UAModalPanel *mainSubModalPanel = [[[MainSubView alloc] initWithFrame:self.view.bounds] autorelease];
    [self.view addSubview:mainSubModalPanel];
    [mainSubModalPanel showFromPoint:CGPointMake(384.5, 512.5)];

}

MainSubView.h

@interface MainSubView : UAModalPanel
{
    NSString *dishName;
}
@property (strong, nonatomic) IBOutlet UILabel *mainTitle;
@property (nonatomic, retain) NSString *dishName;

ただし、テーブルビューからサブビューの「dishName」にデータを渡して「mainTitle」=「dishName」に設定すると問題が発生します。

ありがとう!

4

3 に答える 3

0

UIView をサブクラス化し、それを MainSubView と呼んでいるようです。次に、いくつかのプロパティをサブクラスに追加し、View Controller から設定します。

カスタム UIView の .h ファイルを UIViewController の .h ファイルに含めてください。

mainSubModalPanel.myProperty = myString;

次に、コードでカスタム UIView を作成しているので、UIViewController のサブビューとして追加することを忘れないでください。

于 2013-03-19T23:53:42.857 に答える
0

まず、アクセスする必要があるプロパティはサブクラスの一部ですが、新しく割り当てられたものをポインターに格納MainSubViewしています。初期化を次のように変更してみてください。UAModalPanelMainSubViewMainSubView

    MainSubView *mainSubModalPanel = [[[MainSubView alloc] initWithFrame:self.view.bounds] autorelease];

dishNameこれで、 とを設定できるはずmainTitleですtext:

    mainSubModalPanel.dishName = @"Pizza!";
    mainSubModalPanel.mainTitle.text = @"Moar Pizza!";

そして、それをサブビューとして追加し、上記のように追加します(グリッチが少なくなる傾向があるため、所有権を渡す前にオブジェクトを完全に設定するのが好きです)


マイナーノート:

あなたのプロパティは、よりも修飾子NSString *dishNameを持っている方がおそらく良いでしょう。変更可能なサブタイプを持つ Foundation 型(つまり、NSString には NSMutableString サブクラスがあります)は、外部から変更できる変更可能なサブクラスに渡されます。一般に、これはあなたが望むものではなく、バグにつながります(もちろん、明示的にNSMutableString を要求した場合を除きます)copyretaincopy

@property (nonatomic, copy) NSString *dishName;

また、MainSubView のmainTitle.textmatchを持つことを計画している場合は、次のように自動的に設定dishNameするカスタム セッター メソッドを指定することを検討してください。dishNamemainTitle.text

- (void)setDishName:(NSString *)newDishName
{
    BOOL notTheSameStringInstance = (newDishName != dishName);
    BOOL notIdenticalStringContents = ![newDishName isEqualToString:dishName];
    if (notTheSameStringInstance && notIdenticalStringContents) {
        [dishName release];
        dishName = [newDishName copy];

        mainTitle.text = dishName;
    }
}
于 2013-03-20T00:29:33.703 に答える
0

init メソッドを、データを渡す init メソッドに調整します。

MainSubView *mainSV = [[MainSubView alloc] initWithMyCustomData:(NSDictionary *)dictionaryObject andAnArray:(NSArray *)array andAString:(NSString *)string andANumber:(NSNumber *)aNumber;
于 2013-03-19T23:43:40.457 に答える