尝试从 UIViewController 将属性分配给 UIScrollView 类
Posted
技术标签:
【中文标题】尝试从 UIViewController 将属性分配给 UIScrollView 类【英文标题】:Trying to assign a property to a UIScrollView class from UIViewController 【发布时间】:2011-11-29 18:21:32 【问题描述】:我正在尝试深入研究多个UITableViewControllers
,最终得到一个根据用户选择的部分和行加载的 pdf 文件。我正在尝试将部分和行信息传递给PDFViewController
(有效),但我无法将选定的部分和行信息传递给实际加载PDF 的UIScrollView
。我试图在实例化PDFScrollView
时设置一个属性,但是在加载PDFScrollView
时不会保留该值。
来自 PDFViewController.m 的代码
#import "PDFViewController.h"
#import "PDFScrollView.h"
#import "ProtocolDetailViewController.h"
@implementation PDFViewController
@synthesize detailIndexRow;
@synthesize detailIndexSection;
- (void)loadView
[super loadView];
// Log to check to see if detailIndexSection has correct value
NSLog(@"pdfVC section %d", detailIndexSection);
NSLog(@"pdfVc row %d", detailIndexRow);
// Create PDFScrollView and add it to the view controller.
PDFScrollView *sv = [[PDFScrollView alloc] initWithFrame:[[self view] bounds]];
sv.pdfIndexSection = detailIndexSection;
[[self view] addSubview:sv];
现在来自PDFScrollView.m
,其中pdfIndexSection
不保留在上面来自detailIndexSection
的代码中分配给它的值
#import "PDFScrollView.h"
#import "TiledPDFView.h"
#import "PDFViewController.h"
#import <QuartzCore/QuartzCore.h>
@implementation PDFScrollView
@synthesize pdfIndexRow;
@synthesize pdfIndexSection;
- (id)initWithFrame:(CGRect)frame
// Check to see value of pdfIndexSection
NSLog(@"PDF section says %d", pdfIndexSection);
NSLog(@"PDF row says %d", pdfIndexRow);
if ((pdfIndexSection == 0) && (pdfIndexRow == 0))
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"cardiacarrestgen.pdf" withExtension:nil];
pdf = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfURL);
else if ((pdfIndexSection == 0) && (pdfIndexRow == 1))
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"cardiacarrestspec.pdf" withExtension:nil];
pdf = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfURL);
pdfIndexSection
和pdfIndexRow
都是int
并返回0
,无论在didSelectRowAtIndexPath
中选择了哪个部分或行。
那么两个问题:
为什么当我在ViewController
中为sv.pdfIndexSection
分配一个int 值时,它不会保留ScrollView
中的值。
有没有更好的方法来实现这个概念?
【问题讨论】:
【参考方案1】:问题在于,在 PDFScrollView 中,您正在 initWithFrame 方法中访问字段 pdfIndexSection
和 pdfIndexRow
,但您只是在调用它之后设置它们的值。
换句话说,您在 PDFScrollView 中的- (id)initWithFrame:(CGRect)frame
应该重写为
// PDFScrollView
-(id)initWithFrame:(CGRect)frame
pdfIndexRow:(int) pdfindexRow
pdfIndexSection:(int)pdfIndexSection
然后在你的 PDFViewController 中你像初始化它一样
PDFScrollView *sv = [[PDFScrollView alloc] initWithFrame:[[self view] bounds]
pdfIndexRow:detailIndexRow
pdfIndexSection:detailIndexSection ];
不同之处在于现在您在 init 方法中传递值,因为您在那里使用它们。另一种方法是不在 initWithFrame 方法中执行 PDF 加载逻辑,而是在单独的方法中执行。这样,您可以保持 initWithFrame 简单,并有时间在加载 PDF 之前正确初始化您可能拥有的任何其他字段。
【讨论】:
谢谢!这是完全有道理的并纠正了问题。非常感谢!以上是关于尝试从 UIViewController 将属性分配给 UIScrollView 类的主要内容,如果未能解决你的问题,请参考以下文章
从 UITabBar 初始化 UIViewController 的属性
将数据从 UITableView 传递到 UIViewController
将数据从 UIViewControllerRepresentable 传递给 UIViewController
将带有分页的 UIScrollView 添加到现有的 UIViewController