Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 更新滚动视图';内容_Iphone_Scrollview_Uipagecontrol - Fatal编程技术网

Iphone 更新滚动视图';内容

Iphone 更新滚动视图';内容,iphone,scrollview,uipagecontrol,Iphone,Scrollview,Uipagecontrol,我有一个应用程序,其中包含一个滚动视图和几个表视图。每个tableview都是从另一个viewcontroller加载的。它是从苹果的PageControl示例应用程序构建的。我的目标是让它像苹果的天气应用程序一样工作 我一切正常。所有内容都可以完美加载,并排滚动显示所有正确的表视图及其相关数据。我有一个按钮,当点击它打开另一个视图,允许你编辑每个项目,就像天气应用程序一样,你可以添加一个新的城市,删除它,或移动它 我遇到的问题是,当用户编辑完项目后,如何更新scrollview。想象一下,在P

我有一个应用程序,其中包含一个滚动视图和几个表视图。每个tableview都是从另一个viewcontroller加载的。它是从苹果的PageControl示例应用程序构建的。我的目标是让它像苹果的天气应用程序一样工作

我一切正常。所有内容都可以完美加载,并排滚动显示所有正确的表视图及其相关数据。我有一个按钮,当点击它打开另一个视图,允许你编辑每个项目,就像天气应用程序一样,你可以添加一个新的城市,删除它,或移动它

我遇到的问题是,当用户编辑完项目后,如何更新scrollview。想象一下,在PageControl应用程序中,可以删除第5页或将第4页移动到位置#1,等等

我没有粘贴任何代码,因为:1)它与PageControl应用程序中的代码相同;2) 我还不知道从哪里开始。希望这里有人能帮我

谢谢

更新:(美国东部时间2010年3月5日凌晨3:18)

好的,我已经做了一段时间了。我能够在mainView中调用一个方法来更新scrollView。代码看起来有点笨重,但它可以工作!我真的不喜欢这个代码,因为我只使用了一次属性,无法再次设置它,因为我得到一个错误
objc[10801]:FREED(id):message release sent to FREED object=0x3f4a490
。在我看来,这个物体好像已经被释放了?如果是这样,我不知道怎么做,因为我只在
dealloc
中发布它
dealloc
从未被调用(我放了一个
NSLog
来检查),所以我不知道发生了什么

代码:初始代码与Apple PageControl示例应用程序中的代码相同:
- (void)viewDidLoad {
    [super viewDidLoad];
    appDel = (iBarryAppDelegate *)[[UIApplication sharedApplication] delegate];
    managedObjectContext = appDel.managedObjectContext;
    NSMutableArray *controllers = [[NSMutableArray alloc] init];
    for (unsigned i = 0; i < numberOfPages; i++)
    {
        [controllers addObject:[NSNull null]];
    }
    self.viewControllers = controllers;
    [controllers release];
    scrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * numberOfPages, scrollView.frame.size.height);
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.scrollsToTop = NO;
    scrollView.delegate = self;
    pageControl.numberOfPages = numberOfPages;
    pageControl.currentPage = 0;
    //I end up commenting out all the method calls to
    //[self loadScrollViewWithPage:xxx]; and load all the views at once.
    //I know I should be lazy-loading here , but Scrolling is much 
    //faster if I load them all at once, instead 
    //of when they are about to be viewed.
    for (unsigned i = 0; i < numberOfPages; i++)
    {
        [self loadScrollViewWithPage:i];
    }
}
- (void)loadMainController:(int)page
{
    MainViewController *controller = [viewControllers objectAtIndex:page];
    if ((NSNull *)controller == [NSNull null])
    {
        controller = [[MainViewController alloc] initWithPageNumber:page];
        [viewControllers replaceObjectAtIndex:page withObject:controller];
        [controller release];
    }
    if (nil == controller.view.superview)
    {
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0;
        controller.view.frame = frame;
        [scrollView addSubview:controller.view];
    }
}
- (void)loadScrollViewWithPage:(int)page
{
    if (page < 0) return;
    if (page >= numberOfPages) return;
    [self loadMainController:page];
}
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
    if (pageControlUsed)
    {
        return;
    }
    CGFloat pageWidth = scrollView.frame.size.width;
    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    pageControl.currentPage = page;
//  [self loadScrollViewWithPage:page - 1];
//  [self loadScrollViewWithPage:page];
//  [self loadScrollViewWithPage:page + 1];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    pageControlUsed = NO;
}
- (IBAction)changePage:(id)sender
{
    int page = pageControl.currentPage;
//  [self loadScrollViewWithPage:page - 1];
//  [self loadScrollViewWithPage:page];
//  [self loadScrollViewWithPage:page + 1];
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    [scrollView scrollRectToVisible:frame animated:YES];
    pageControlUsed = YES;
}
-(void)viewDidLoad{
[超级视图下载];
appDel=(iBarryAppDelegate*)[[UIApplication sharedApplication]委托];
managedObjectContext=appDel.managedObjectContext;
NSMutableArray*控制器=[[NSMutableArray alloc]init];
for(无符号i=0;i=页数)返回;
[自动加载主控制器:第页];
}
-(无效)scrollViewDidScroll:(UIScrollView*)发送方
{
如果(已使用页面控制)
{
返回;
}
CGFloat pageWidth=scrollView.frame.size.width;
int page=floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
pageControl.currentPage=页面;
//[带页面的自加载滚动视图:第1页];
//[带页面的自加载滚动视图:第页];
//[self-loadScrollViewWithPage:page+1];
}
-(无效)ScrollViewDiEndDecelling:(UIScrollView*)scrollView
{
pageControlUsed=否;
}
-(iAction)更改页:(id)发件人
{
int page=pageControl.currentPage;
//[带页面的自加载滚动视图:第1页];
//[带页面的自加载滚动视图:第页];
//[self-loadScrollViewWithPage:page+1];
CGRect frame=scrollView.frame;
frame.origin.x=frame.size.width*页;
frame.origin.y=0;
[scrollView scrollRectToVisible:帧动画:是];
pageControlUsed=是;
}

然后,我的代码将刷新滚动视图。我要做的是删除所有子视图并再次加载它们。我不会有超过13个子视图,不确定删除它们并重新创建它们是好主意还是坏主意

- (void)reloadDataNow
{
    for(UIView *subview in [scrollView subviews]) {
            [subview removeFromSuperview];
            NSLog(@"removed a suview");
    }
    [self loadData]; //this method fetches which data will be 
    //in the scrollView. It reloads the number of pages based 
    //on the return result and an NSMutableArray where I store 
    //data to pass to the views that will appear in the scrollView
    NSMutableArray *controllers = [[NSMutableArray alloc] init];
    for (unsigned i = 0; i < numberOfPages; i++)
    {
        [controllers addObject:[NSNull null]];
    }
    scrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * numberOfPages, scrollView.frame.size.height);
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.scrollsToTop = NO;
    scrollView.delegate = self;
    pageControl.numberOfPages = numberOfPages;
    pageControl.currentPage = 0;
    for (unsigned i = 0; i < numberOfPages; i++)
    {
        MainViewController *controller = [controllers objectAtIndex:i];
        if ((NSNull *)controller == [NSNull null])
        {
            controller = [[MainViewController alloc] initWithPageNumber:i team:[[favoritesArray objectAtIndex:i] teamR]];
            [controllers replaceObjectAtIndex:i withObject:controller];
            [controller release];
        }
        if (nil == controller.view.superview)
        {
            CGRect frame = scrollView.frame;
            frame.origin.x = frame.size.width * i;
            frame.origin.y = 0;
            controller.view.frame = frame;
            [scrollView addSubview:controller.view];
        }
    }
    //********************CRASH******************
    //Ideally, I think, the line below would replace the contents of
    //viewControllers with the new controllers. Here is where I get the 
    //"objc[10801]: FREED(id): message release sent to freed object=0x3f4a490" 
    //error. This line should probably be placed after [self loadData] or something,
    //but it crashes so I put but here to display better. I tried
    //adding self.viewControllers = nil; but I don't think that is 
    //the problem with the error message.
    self.viewControllers = controllers;
}
-(void)立即重新加载数据
{
对于(UIView*子视图在[scrollView子视图]中){
[子视图从SuperView移除];
NSLog(@“删除了suview”);
}
[self-loadData];//此方法获取将要删除的数据
//在scrollView中。它基于
//在返回结果和我存储的NSMutableArray上
//要传递到将显示在scrollView中的视图的数据
NSMutableArray*控制器=[[NSMutableArray alloc]init];
for(无符号i=0;i