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。我正在调试,当在 DetailView 中运行 strPreview 和 strMemo 时为 0x00000。提前致谢

4

3 回答 3

0

试试这个:

- (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;
    [detailAlert createWebView];

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

}

为字符串分配编写代码

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

        //add following two lines
        strPreview = [[NSString alloc] init];
        strMemo = [[NSString alloc] init];
        //........
        return self;
}

-(void) createWebView {
    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];
}
于 2013-07-10T10:15:25.683 回答
0

这里的问题是您在初始化 DetailView 后在详细视图中设置了两个属性。但是您正在尝试在初始化程序中使用尚未设置的属性值。

正如我所看到的,您可以尝试两种选择。

  1. 编写另一个接受这两个属性的初始化程序。这样您就可以在该初始化程序中使用这两个属性。

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

      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 设置两个属性后调用该方法。

于 2013-07-10T10:31:01.147 回答
0

您可以传递自定义初始化程序,如下所示。如果您愿意,可以向自定义 Initialisers 添加一个参数

在 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 回答