0

UITableview (CompleteView) から選択した 2 つの文字列を新しい UIView (DetailView) に渡したい これは私のコードです:

CompleteView.h() で

@property (nonatomic, retain) NSString *memoString;
@property (nonatomic, retain) NSString *previewString;

Completeview.m() 内

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{           
previewString = [PreviewArray objectAtIndex:indexPath.row];
            NSLog(@"Preview string %@",previewString);
            memoString = [MemoArray objectAtIndex:indexPath.row];
            NSLog(@"Memo string %@",memoString);

            DetailView *detailAlert = [[DetailView alloc] initWithFrame:CGRectMake(10, 40, 300, 300)];
            detailAlert.strPreview =previewString ;
            detailAlert.strMemo =  memoString;

            [self.view addSubview:detailAlert];
            [detailAlert show];
            [detailAlert release];
}

DetailView() で

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        originalFrame = frame;

        UIWebView *videoview = [[UIWebView alloc] initWithFrame:CGRectMake(10,80,275.0,150)];
        NSString *url=[NSURL URLWithString:strPreview];
        NSURL *nsurl=[NSURL URLWithString:url];
        NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
        [videoview loadRequest:nsrequest];
        [self addSubview:videoview];

    return self;
}

DetailView.h 内

@property (nonatomic, retain) NSString* strMemo;
@property (nonatomic, retain) NSString* strPreview;

実行すると、previewString は DetailView に送信されません。strPreview を実行し、DetailView の strMemo が 0x00000 の場合、デバッグ中です。前もって感謝します

4

3 に答える 3

0

以下のようなカスタム初期化子を渡すことができます。必要に応じて、カスタム初期化子に 1 つのパラメーターを追加できます

CompleteView.h() で

@property (nonatomic, retain) NSString *memoString;
@property (nonatomic, retain) NSString *previewString;

Completeview.m() 内

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{           
previewString = [PreviewArray objectAtIndex:indexPath.row];
            NSLog(@"Preview string %@",previewString);
            memoString = [MemoArray objectAtIndex:indexPath.row];
            NSLog(@"Memo string %@",memoString);

            DetailView *detailAlert = [[DetailView alloc] initWithFrame:CGRectMake(10, 40, 300, 300) andPreviewstring:previewString];
            detailAlert.strPreview =previewString ;
            detailAlert.strMemo =  memoString;

            [self.view addSubview:detailAlert];
            [detailAlert show];
            [detailAlert release];
}

DetailView() で

- (id)initWithFrame:(CGRect)frame andPreviewstring:(NSString *)stPreview
{
    self = [super initWithFrame:frame];
    if (self) {
        originalFrame = frame;

        UIWebView *videoview = [[UIWebView alloc] initWithFrame:CGRectMake(10,80,275.0,150)];
        NSString *url=[NSURL URLWithString:strPreview];
        NSURL *nsurl=[NSURL URLWithString:url];
        NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
        [videoview loadRequest:nsrequest];
        [self addSubview:videoview];

    return self;
}

DetailView.h 内

@property (nonatomic, retain) NSString* strMemo;
@property (nonatomic, retain) NSString* strPreview;
- (id)initWithFrame:(CGRect)frame andPreviewstring:(NSString *)stPreview;
于 2013-07-10T10:41:34.030 に答える
0

ここでの問題は、DetailView を初期化した後に詳細ビューで 2 つのプロパティを設定していることです。しかし、まだ設定されていない初期化子内のプロパティ値を使用しようとしています。

ご覧のとおり、試すことができるオプションは 2 つあります。

  1. これら 2 つのプロパティを受け入れる別の初期化子を記述します。そのイニシャライザでこれら 2 つのプロパティを使用できるようにします。

    • (id)initWithFrame:(CGRect)frame strMemo:(NSString *)memo strPreview:(NSString *)preview { self = [super initWithFrame:frame]; if (self) { originalFrame = フレーム;

      UIWebView *videoview = [[UIWebView alloc] initWithFrame:CGRectMake(10,80,275.0,150)];
      NSString *url=[NSURL URLWithString:preview];
      NSURL *nsurl=[NSURL URLWithString:url];
      NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
      [videoview loadRequest:nsrequest];
      [self addSubview:videoview];
      
      return self;
      

      }

  2. または、現在のイニシャライザでロジックを抽出し、CompleteView から 2 つのプロパティを設定した後に呼び出すことができる別のメソッドに配置できます。

于 2013-07-10T10:31:01.147 に答える