Swift:重新加载视图控制器

时间:2015-07-03 13:16:26

标签: ios swift refresh viewcontroller

点击某个按钮时,我需要刷新view controller。简单地激活viewDidLoad()似乎不适用于我需要做的事情。但是,当我离开view controller然后再回到它时,它似乎完美无缺?

如何刷新/重新加载view controller,就好像我已经离开它然后回到它而没有真正离开它?

8 个答案:

答案 0 :(得分:15)

无论您在viewDidLoad撰写的代码是什么,请在viewWillappear()中添加。这将解决您的问题。

答案 1 :(得分:10)

您不应手动调用viewDidLoad方法, 相反,如果您想重新加载任何数据或任何UI,可以使用:

override func viewDidLoad() {
    super.viewDidLoad();

    let myButton = UIButton()

    // When user touch myButton, we're going to call loadData method
    myButton.addTarget(self, action: #selector(self.loadData), forControlEvents: .TouchUpInside)

    // Load the data
    self.loadData();
}

func loadData() {
    // code to load data from network, and refresh the interface
    tableView.reloadData()
}

每当您想重新加载数据并刷新界面时,您都可以调用self.loadData()

答案 2 :(得分:2)

这可能有点晚了,但您是否尝试拨打loadView()

答案 3 :(得分:1)

在Swift 4中:

self.view.layoutIfNeeded()

答案 4 :(得分:0)

如果您使用的是导航控制器,则可以再次选择当前的UIViewController并将其刷新。 Here I use a UIButton for refreshing

答案 5 :(得分:0)

View Life Cycle

每次打开视图时,它将加载ViewWillAppear。上面是图片视图控制器生命周期的链接。

viewWillAppear()-在将视图控制器的内容视图添加到应用程序的视图层次结构之前调用。使用此方法可以触发在屏幕上显示内容视图之前需要进行的所有操作。尽管有名称,只是因为系统调用了此方法,所以不能保证内容视图将变为可见。该视图可能被其他视图遮挡或隐藏。此方法只是表明内容视图即将添加到应用的视图层次结构中。

https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html

答案 6 :(得分:0)

如果您需要通过更改后重新绘制视图来更新画布,则应调用setNeedsDisplay。

感谢您@Vincent的先前评论。enter image description here

答案 7 :(得分:-2)

Swift 5.2

我发现

方法可以工作并动态刷新视图,其中按钮的可见性已更改为:-

class DPWHDataset(Dataset):
  def __init__(self, mean=None, std=None, phase=None, dataset=None):
    self.data = dataset
    self.mean = mean
    self.std = std
    self.phase = phase
    self.transforms = get_transforms(phase, mean, std)

  def __len__(self):
    return len(self.data)

  def __getitem__(self, idx):
    image_name = self.data[idx]

    image_path = image_prefix + image_name + ".jpg"
    mask_path = binary_mask_prefix + image_name + "_mask.png"

    mask = cv2.imread(mask_path, 0)
    print(image_path)

    # image = np.array(Image.open(image_path))
    # mask = np.array(Image.open(mask_path))
    image = cv2.imread(image_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    mask = create_channel_mask(mask)
    # augmented = self.transforms(image=image, mask=mask)
    # image = augmented['image']
    # mask = augmented['mask']

    image = torchvision.transforms.ToTensor()(image)
    image = torchvision.transforms.Normalize(mean=self.mean, std=self.std)(image)
    mask = torchvision.transforms.ToTensor()(mask)
    return image, mask

这可能是一个不好的做法,但希望有人会发表评论。