2011-08-22 53 views
2

我知道已经有很多类似这样的问题。请不要低估或关闭问题。我刚刚尝试实施这些问题的解决方案。没有为我工作。而且我的情况也有所不同。这里是:从UIScrollView中删除UIImageView

我的应用程序包含一个图片库。它是一个滚动视图,显示从sqlite数据库检索到的图片。用户可以滚动图像,添加或删除图像等。我可以动态地添加图片到图库。但是当我需要实现删除功能时,问题就出现了。我使用下面的代码,但即使在调用removeFromSuperView后,图像也没有从滚动视图中移除。

-(void)deleteDeck{ 

if(selectedEditDeck!=0){ 
    [deck deleteSelectedDeck:selectedEditDeck]; //deleting from database 

    //problem starts here *** 
    [(UIImageView*)[decksGallery viewWithTag:selectedEditDeck-1]removeFromSuperview]; 
    [self loadGallery]; 
    selectedEditDeck=0; 
    //Ends here***** 

    [tableData release]; 
    tableData=[NSMutableArray array]; 
    [self showCardNamesinTable]; 
    [aTableView reloadData]; 
} 

我已经创造了的loadView方法的UIScrollView。然后刷新每个删除和添加的图像的后视图,以便我可以显示更新的库,我使用了下面的代码段:

-(void)loadGallery{                    //Reloading all for adding a single deck image. 

//Database part**** 
NSString *sqlStr = [NSString stringWithFormat:@"select first_card from decksTable"]; 
char *sql = (char*)[sqlStr UTF8String]; 
kidsFlashCardAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
NSMutableArray *galleryImagesArray=[appDelegate.dbConnection fetchColumnFromTable:sql col:0]; 
NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 
NSString *docDirectory = [sysPaths objectAtIndex:0]; 
numberofImages = [galleryImagesArray count]; 
printf("number is %d",numberofImages);//Database part of code ends here 

//在下面的代码片断我将图像添加到的UIScrollView

for (int i = 0; i < [galleryImagesArray count]; i++) { 
    CGFloat yOrigin = i * 65; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", docDirectory,[galleryImagesArray objectAtIndex:i]]; 
    galleryImage = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin+140, 15,50,50)]; 
    //galleryImage.tag=[galleryImagesArray count]; 
    galleryImage.tag=i; 
    printf("THE TAG IS %d",galleryImage.tag); 
    galleryImage.clipsToBounds=YES; 
    galleryImage.layer.cornerRadius=11.0; 
    galleryImage.backgroundColor=[UIColor clearColor]; 
    galleryImage.image =[UIImage imageWithContentsOfFile:filePath]; 
    [decksGallery addSubview:galleryImage]; 
    [galleryImage release]; 
} 
decksGallery.contentSize = CGSizeMake(115*[galleryImagesArray count], 80); 
//[decksGallery reloadInputViews]; 
+0

对不起,代码格式化的方式... n顺便说一句,我使用imageview的标记来引用它们,同时删除... – booleanBoy

+0

你可以把一个断点,并验证您的selectedDeck设置和该代码从数据库中删除套牌正在执行。删除后检查数据库中的新加载是否再次提供相同的图像。 – Ved

+0

不,我存储图像路径在数据库中,并检索它.....实际上图像被删除时,我顺序删除它..我有五个图像...当我开始删除图像与标签5 ...它s被删除....但当我做它随机它不会被删除..当我选择图像wid标签zero..tat第一img..all图像被gettn删除... – booleanBoy

回答

1

确保您[decksGallery viewWithTag:selectedEditDeck-1]没有返回nil和刷新代码运行之前的图像实际上是从你的数据库中删除。

另外,您在创建代码中设置了imageView.tag = i;,因为i应该是0,这是每个UIView的标签默认值,所以最好还是修复创建代码。

+0

不,它不返回零。关于你对标签的默认值有什么看法,你能解释一下吗? – booleanBoy

+0

你最好像这样设置.tag:imageView.tag = kImageViewStartAt + i; ,其中kImageViewStartAt被定义为一个大数字,例如1000。你可以通过使用[*** viewWithTag:kImageViewStartAt + selectedDeck - 1]来获取imageView; – xuzhe

+0

关于你的问题本身,我想也许你应该检查你带标签的imageView是否是你想删除的视图。此外,你最好通过使用NSLog检查你的decksGallery有多少imageView(“SubView Count:%@”,[[decksGallery subViews] count]);并查看计数是否正确。 – xuzhe

0

如果你只是想从你的imageView中删除图像,你也可以做imageView.image = nil;

UIImageView*imageView = (UIImageView*)[decksGallery viewWithTag:selectedEditDeck-1]; 
[imageView removeFromSuperview]; 
imageView = nil; 
+0

感谢您的答案...但仍然不工作... – booleanBoy

+0

你可以检查什么是当你的断点击中[imageView removeFromSuperview] imageView对象;行... – Robin