検索

ホームページ  >  に質問  >  本文

objective-c - 关于iOS中viewWithTag的问题?

原文地址:链接描述
在这篇文章中有一个简单的项目叫 BeginnerCook Starter ,其中一个ViewController+.swift的文件中有这样一段代码:

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        if listView.subviews.count < herbs.count {
            listView.viewWithTag(0)?.tag = 1000 //prevent confusion when looking up images
            setupList()
        }
    }

listView.viewWithTag(0)?.tag = 1000 这一行代码到底有什么作用,他虽然加了注释我也不是很明白,求大神回答。

迷茫迷茫2773日前739

全員に返信(1)返信します

  • PHPz

    PHPz2017-04-17 17:32:46

    その後、0 から始まるタグを使用して各 UIIamgeView を識別するため、後から追加するタグとの重複を避けるために、listView 内のビューのタグを 0 に変更する必要があります (タイプは UIScrollView)。


    以下の分析は明確ではありませんが、結論は正しいです。ごめんなさい。次のように更新されました:

    合計スコアと構造: 元の結論は正しいですが、タグが 0 から 1000 に変更されたビューは水平スクロール バーですが、考え方は間違っています。 。 。回答には記載がありませんが、詳しく追記させていただきます


    まず、この文書から学べることを 2 つ書きます:

    Swift の tag 宣言は次のようになります: var tag: Int そして、ドキュメントの下に次の段落があります:

    ディスカッション
    デフォルト値は 0 です。このタグの値を設定し、その値を後でビューを識別するために使用できます。

    タグのタイプはオプションではないことがわかります。これは、UIView にはタグが必要であることを意味します。デフォルト値は 0 であることが議論で指摘されました。

    質問のインターフェースは次のようになります:

    リーリー

    注 1: 正解です。 。 。以下に示すように、StoryBoard で listView のタグを 1000 に設定しました。 StoryBoard ではタグの設定が難しいため、横スクロールバーはここでは変更しません。これを覚えてすぐに使ってください。

    (右下のタグ = 1000)

    そして、- viewWithTag: の文書には次の段落が含まれています

    ディスカッション

    このメソッドは、現在のビューとそのすべてのサブビューで指定されたビューを検索します。

    `viewWithTag:` メソッドは、ビュー自体 とそのサブビューを検索します。

    上記のように、StoryBoard では listView のタグが 1000 に変更されているため、質問内の listview.viewWithTag(0) を実行すると、最初に見つかるのは listView 自体ではなく、そのサブビュー内のスクロール バーです。次に、スクロールバーのタグを 1000

    に変更します。

    前の結論に戻りますが、タグ 0 のビューは次のとおりです。

    水平スクロールバー XD。 。 。


    私の表現能力には限界があります。 。 。あまりにも簡単なことなので、めまいがしてしまいそうです。例を挙げた方が良いでしょう:


    画像内のプレイグラウンド コード:

    リーリー

    返事
    0
  • キャンセル返事