簡體   English   中英

在iOS中將字符串從UITableView傳遞到UIView

[英]Pass string from UITableView to UIView in iOS

我想將從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時。 提前致謝

嘗試這個:

- (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];
}

這里的問題是,您在初始化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中設置兩個屬性后調用該方法。

您可以通過如下所示的自定義初始化程序。 如果您願意,可以向自定義初始化程序中添加一個參數

在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM