3

私は初心者のiOSプログラマーです、ここに私の質問があります:私はmapviewとセグメント化されたコントロールを持っています、またこのようにUIControlEventValueChangedが発生したときに呼び出されるchangeMapType関数もあります

// change map type with segmented control
- (IBAction)changeMapType:(id)sender
{
    NSInteger i = [mapTypeControl selectedSegmentIndex];
    if (i == 0){
        [worldView setMapType:MKMapTypeStandard];
    }
    if (i == 1) {
        [worldView setMapType:MKMapTypeSatellite];
    }
    if (i == 2) {
        [worldView setMapType:MKMapTypeHybrid];
    }
}

そしてviewDidLoadで、このメソッドを呼び出して、どのマップタイプが最初であるかを設定したいと思います。

[mapTypeControl setSelectedSegmentIndex:2];
[self changeMapType:nil];

上記のコードは正常に機能しますが、以下のコードも正常に機能します

[mapTypeControl setSelectedSegmentIndex:2];
[self changeMapType:self];

最後に、SENDERとして何を渡すのですか?どちらが正しい?

4

5 に答える 5

2

概念的には、どちらも正しくありません。実際には、どちらも問題ありません。

senderUIControlアクションを開始するインスタンス(この場合はセグメント化されたコントロール)です(または少なくともそうする必要があります) 。実際、次のようにメソッドを開始する必要があります。

- (IBAction)changeMapType:(UISegmentedControl *)sender
{
    NSInteger i = [sender selectedSegmentIndex];

    // etc.
}

また、手動で呼び出す場合は、セグメント化されたコントロールを渡す必要があります。

[self changeMapType:mapTypeControl];
于 2013-03-08T08:44:10.640 に答える
0

の場合IBAction、送信者はメッセージ呼び出しを送信したインターフェイスオブジェクトです。あなたのインスタンスでは、これをプログラムでトリガーすると、そのようなオブジェクトは存在しないため、を渡す必要がありnilます。

于 2013-03-08T08:43:59.870 に答える
0

私は他の答えに同意します - を使用しないのでsender、好きなものを渡すことができます。

実際には、メソッドを変更してsenderパラメーターをまったくとらないようにすることをお勧めします。

- (IBAction)changeMapType

コントロール アクションには、次の 3 つのシグネチャがあります。

- (IBAction)changeMapType
- (IBAction)changeMapType:(id)sender
- (IBAction)changeMapType:(id)sender forEvent:(UIEvent *)event

追加のパラメーターは、使用する場合にのみ使用することをお勧めします。

そして、そのパラメーターを取り除けば、何を渡すかを心配する必要はありません。そして、この解決策は実際には正しいです。実際には送信者ではない何かを渡しているわけではありません。

のようなランダムなものを渡すと、あるnil日、パラメーターを使用することを決定し、senderジャンクを 1 か所で渡したことを忘れて、問題が発生する可能性があります。ただし、パラメーターを完全に削除した場合、senderパラメーターを使用する必要がある場合は、メソッド名を変更する必要があります。これには、それを呼び出すすべての場所を変更することが含まれます (そうしないと、メソッド名が変更されたため、コンパイルされません)。 )。したがって、誤って台無しにすることはできません。

于 2013-03-09T02:39:23.380 に答える
0

sender" " (IBAction メソッドに渡される) では実際には何もしていないので、必要なものはほとんど何でも渡すことができます。

" self" または " nil" を使用すれば問題ありません。

いずれの IBAction 内で" " を使用することになったsender場合は、プログラムで何を送信するかを気にする必要があります。アクションに接続されているユーザー インターフェイスのボタンまたはオブジェクトをクリックすると、そのオブジェクトへの参照が送信されます。

ps ここでアンサーパーティーのようです!

于 2013-03-08T08:42:36.283 に答える
0

メソッドで送信者を使用することさえしないので、どちらでも問題ありません...通常、メソッドが関数を使用したオブジェクトについて何かを知る必要がある場合に備えて、そこに行くことができますif([sender isKindOfClass:[SomeObject class]])

于 2013-03-08T08:43:36.407 に答える