UIView对象可以充当UITableView对象吗?

时间:2015-12-31 12:39:00

标签: ios objective-c uitableview uiview

我目前正在从一本书中学习iOS开发。有一个代码让我困惑,我需要帮助。

因此,书中的说明要求读者首先创建单个视图应用程序。然后,它表示要拖动TableView并将其放到ViewController上。然后在选择表视图时,在Table View对象的View部分中为Tag值输入1。

在此之后,它说要访问作为故事板中ViewController的控制器的实现文件,并添加一些代码。在那之前,对我来说一切都很好......

然而,有一次,它要求读者添加以下代码:

UITableView *tableView = (id)[self.view viewWithTag:1];

这是我需要帮助的代码。我明白它想要做什么。它正在选择View Controller中的Table View,但这不会返回UIView类型的对象吗? UIView类型的对象如何等于UITableView对象?我认为它是UITableView类型的一个对象,它可以“行动”为UIView类型,因为UITableViewUIView ....的孙子。

另外,(id)部分的目的是什么?它是否将UIView转换为id类型的对象?为什么这有必要?

谢谢

1 个答案:

答案 0 :(得分:2)

确定。 [self.view viewWithTag:1]将返回UIView,在此您知道tableview有标记1,它将被返回。你有这样的困惑,如果那是一个视图,那么我们如何将它分配给一个tableview。事情是UITableViewUIView的子类。因此,您可以从该方法分配UIView的任何子视图。

id的目的是,id意味着你不知道将要返回什么。 id表示任何类型。

所以简要解释(id)[self.view viewWithTag:1]意味着从方法返回的UIView基本上被转换为"任何对象"。这样做是因为用户可能会混淆或忘记并使用标记1分配任何其他对象。

更精细的剪辑将是UITableView *myTableview = (UITableView *)[self.view viewWithTag:1]。这是更微妙的,因为您已经知道标签1的视图是一个tableview。但将其转换为id更安全"。

希望可以清除你的困惑。检查类层次结构以便更好地理解here

修改

正如Paulw11指出的那样,在这种意义上,转换为id并不严格,因为我们将它分配到tableview中,所以在你不知道对象是什么类的情况下,你将它分配给id,你可以在那个时候把它变成id。

例如。 id dontKnowWhatObject = (id)[self.view viewWithTag:1]