[英]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之后在詳細視圖中設置了兩個屬性。 但是您正在嘗試使用初始化器中尚未設置的屬性值。
如我所見,您可以嘗試兩種選擇。
編寫另一個接受這兩個屬性的初始化程序。 這樣您就可以在該初始化程序中使用這兩個屬性。
(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;
}
否則,您可以在當前初始化器中提取邏輯,並將其放入單獨的方法中,您可以在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.