带有 IUViewController 的 UIScrollView 拖放对象

Posted

技术标签:

【中文标题】带有 IUViewController 的 UIScrollView 拖放对象【英文标题】:UIScrollView with IUViewController dropping objects 【发布时间】:2013-08-28 13:34:15 【问题描述】:

我对 UIScrollView 有一个非常奇怪的问题并添加了 UIViewControllers。 看起来当 UIViewControllers 添加到 UIScrollView 进行分页时,UIViewController 会丢弃所有添加的对象。

在项目中,我有一个带有两个视图的故事板,它们正确连接到相应的代码。

我知道代码不会将添加的 UIViewController 移动到正确的 X,但在这个测试中我只添加了一个 UIViewController 所以没关系。

这是滚动代码.h:

#import <UIKit/UIKit.h>
#import "TestViewController.h"

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@property (strong, nonatomic) NSMutableArray *scrollController;

@end

这是滚动代码.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

self.scrollController = [[NSMutableArray alloc] init];



- (void)viewDidAppear:(BOOL)animated 

//just adding two controllers
TestViewController *first = [[TestViewController alloc] init];
[self.scrollView addSubview:first.view];
[self.scrollController addObject:first];

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width *    self.scrollController.count, self.scrollView.frame.size.height);

self.pageControl.numberOfPages = [self.scrollController count];




- (void)scrollViewDidScroll:(UIScrollView *)sender 

// Update the page when more than 50% of the previous/next page is visible
CGFloat pageWidth = self.scrollView.frame.size.width;
int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

self.pageControl.currentPage = page;


- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


@end

这是视图控制器代码.h:

#import <UIKit/UIKit.h>

@interface TestViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *lblMsg;

@end

这是视图控制器代码.m:

#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController

- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view.

NSLog(@"Label: %@", self.lblMsg);


- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


@end

日志中的输出是:

Label: (null)

谁能看出我做错了什么?

【问题讨论】:

【参考方案1】:

如果你创建你的 ViewController 使用

TestViewController *first = [[TestViewController alloc] init];

您的标签 (IBOutlet) 不会被关联。

在 Xcode 中导航到您的故事板,选择您的视图控制器并在右侧实用程序的身份检查器中分配一个唯一的故事板 ID(“myIdentifier”)。 试试

NSString *identifier = @"myIdentifier"; 
TestViewController *first = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

查看文档:

每个视图控制器对象都是其视图的唯一所有者。你必须 不将同一个视图对象与多个视图控制器关联 对象。此规则的唯一例外是容器视图 控制器实现可以将此视图添加为自己的子视图 查看层次结构。在添加子视图之前,容器必须先 调用它的 addChildViewController: 方法来创建一个父子 两个视图控制器对象之间的关系。

【讨论】:

当然.. 我完全错过了那部分。它适用于我现在应该使用情节提要 ID 和 TestViewController *first = [self.storyboard instantiateViewControllerWithIdentifier:identifier];。感谢您的帮助

以上是关于带有 IUViewController 的 UIScrollView 拖放对象的主要内容,如果未能解决你的问题,请参考以下文章

react-交互-异步uis

CQRS, Task Based UIs, Event Sourcing agh!

UIS R170 G2安装centos启动报Attempt to access block outside partition

带有选项卡视图控制器的 Xcode IOS 转换视图

如何为不同的 UI 使用多个 Bloc?

嵌套的 UIViewController 需要推送到根 UINavigationController