2013-07-10 1 views
0

Я хочу передать 2 строку, выбранную из UITableView (CompleteView) к новым UIView (DetailView) Это мой код:Pass строки из UITableView в UIView в прошивкой

В 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 и strMemo в DetailView 0x00000. Заранее спасибо

+0

что ваша проблема? правильный код – Vinodh

+0

При запуске previewString не отправляется в DetailView. Я отлаживаю при запуске strPreview и strMemo в DetailView 0x00000 – NGOT

+0

@NGOT см. Код DharaParekh, и теперь попробуйте. –

ответ

0

Вы можете передать пользовательские инициализаторы, как показано ниже. При желании вы можете добавить один параметр обыкновения инициализаторов

В CompleteView.h()

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

В Completeview.м()

- (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; 
+0

спасибо большое, сейчас это работает :) – NGOT

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]; 
} 
+0

Спасибо, но это не сработает. – NGOT

+0

@NGOT, что является выходом nslog для этих трех строк. NSLog (@ "строка предварительного просмотра% @", previewString); memoString = [MemoArray objectAtIndex: indexPath.row]; NSLog (@ "Memo string% @", memoString); – DharaParekh

+0

, если NSLog в COmpleteView отображает значение 2 переменных previewString и memoString, но при нажатии DetailView (тип UIVIew) переменная 2 не отображается значение – NGOT

0

Проблема здесь вы устанавливаете два свойства в детальном после инициализации DetailView. Но вы пытаетесь использовать значения свойств внутри инициализатора, которые еще не установлены.

Как я вижу, есть два варианта, которые вы можете попробовать.

  1. Напишите еще один инициализатор, который принимает эти два свойства. Чтобы вы могли использовать эти два свойства в этом инициализаторе.

    • (ID) initWithFrame: (CGRect) кадр strMemo: (NSString *) памятка strPreview: (NSString *) Предварительный просмотр { само = [супер initWithFrame: кадр]; если (сам) { оригинальный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.

+0

Можете ли вы пример кода, PLS? Большое спасибо – NGOT

+0

См. Обновленный ответ. – Inoka

Смежные вопросы