簡體   English   中英

刷新視圖或刪除子視圖iOS

[英]Refresh view or remove subviews ios

我正在嘗試創建一個場景,使用戶可以在屏幕上滑動以在帖子之間瀏覽。 帖子既可以是帶有文字的圖像,也可以只是便箋,並且視圖根據發生的位置而改變。

獲取過程非常完美。 無論我向右或向左滑動,它都會得到正確的顯示。 問題在於舊視圖不會消失並且視圖重疊。 當您從便箋到照片或從照片轉到照片時,這尤其麻煩,因為大小不同...

這是代碼:

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@" GETRESULT %@   POSTNUMBER %d", getResult, postNumber);
Post *postInfo = [[Post alloc] init];

postInfo = [getResult objectAtIndex:postNumber];

UITextView *postText = [[UITextView alloc] init];
imgView = [[UIImageView alloc] init];

NSString *getImageString = postInfo.attachments;
if(getImageString){
    postText = [[UITextView alloc] init];
    postText.text = postInfo.noteText;
    [postText setFrame:CGRectMake(20, 320, 280, 80)];
    NSLog(@"IMG1");
}else {
    postText = [[UITextView alloc] init];
    postText.text = postInfo.noteText;
    [postText setFrame:CGRectMake(20, 10, 280, 240)];
    NSLog(@"TEXT1");
}
[self.view addSubview:postText];
SHOWHUD(self.view);
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

        NSURL *url = [NSURL URLWithString:getImageString];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [imgView setFrame:CGRectMake(20, 10, 280, 300)];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setImage:img];

    dispatch_async(dispatch_get_main_queue(), ^{   
        [self.view addSubview:imgView];
        HIDEHUD(self.view);
    });
});


UISwipeGestureRecognizer *recognizerRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)];
[[self view] addGestureRecognizer:recognizerRight];

UISwipeGestureRecognizer *recognizerLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)];
[recognizerLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:recognizerLeft];

// Do any additional setup after loading the view.
}

- (void)handleSwipeRight:(UISwipeGestureRecognizer *)gestureRecognizer{
NSLog(@"SWIPE RIGHT");
if(postNumber > 0){
    postNumber--;
    Post *postInfo = [[Post alloc] init];

    postInfo = [getResult objectAtIndex:postNumber];

    UITextView *postText = [[UITextView alloc] init];
    imgView = [[UIImageView alloc] init];

    NSString *getImageString = postInfo.attachments;
    if(getImageString){
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 320, 280, 80)];
        NSLog(@"IMG1");
    }else {
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 10, 280, 240)];
        NSLog(@"TEXT1");
    }
    [self.view addSubview:postText];
    SHOWHUD(self.view);
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        if (getImageString) {

        NSURL *url = [NSURL URLWithString:getImageString];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [imgView setFrame:CGRectMake(20, 10, 280, 300)];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setImage:img];
        }else {
            [imgView removeFromSuperview];
        }
        dispatch_async(dispatch_get_main_queue(), ^{   
            [self.view addSubview:imgView];
            HIDEHUD(self.view);
        });
    });
}

}

- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer{
NSLog(@"SWIPE LEFT");
if(postNumber < [getResult count] - 1){
    postNumber++;

    Post *postInfo = [[Post alloc] init];

    postInfo = [getResult objectAtIndex:postNumber];

    UITextView *postText = [[UITextView alloc] init];
    imgView = [[UIImageView alloc] init];

    NSString *getImageString = postInfo.attachments;
    if(getImageString){
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 320, 280, 80)];
        NSLog(@"IMG1");
    }else {
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 10, 280, 240)];
        NSLog(@"TEXT1");
    }
    [self.view addSubview:postText];
    SHOWHUD(self.view);
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        if(getImageString){
        NSURL *url = [NSURL URLWithString:getImageString];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [imgView setFrame:CGRectMake(20, 10, 280, 300)];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setImage:img];
        }else {
            [imgView removeFromSuperview];
        }
        dispatch_async(dispatch_get_main_queue(), ^{   
            [self.view addSubview:imgView];
            HIDEHUD(self.view);
        });
    });

}
}

起初,我只增加了postNumber並在滑動操作中調用了viewDidLoad。 但這給了我完全相同的結果...這只是無數次嘗試和錯誤嘗試中的一種,很抱歉,這是更麻煩的嘗試之一...

如果有人得到解決方案,將不勝感激。

預先感謝,湯姆

你有嘗試過嗎?

for (UIView * view in self.view.subviews) {
    if ([view isEqual:postText]||[view isEqual:imgView]) {
        [view removeFromSuperview];
    }

}

我無法從超級視圖中刪除變量,因為我是在viewDidLoad的新實例中完成的。 我這次嘗試調用viewDidLoad之前這樣做,它確實起作用了!

抱歉浪費您的時間...

湯姆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM