6

在我的iPhone應用程序中,我想在搜索欄頂部添加活動指示器。集成到搜索欄中時的活動指示器不會顯示在iPhone SDK中

當它正在搜索它應該顯示活動指標。

我在XIB中添加了活動指示器並創建了它的出口。

我在搜索結束時隱藏它。

但活動指示不顯示。

問題

我想通了搜索功能(比如A)依次(其中I動畫活動的指標)調用另一個函數(說B)所以主線程在執行使用函數B.但是對於活動指示器來設置動畫我們需要主線程。

所以我嘗試使用performSelectorInBackGround:withObject方法調用函數B.現在,當我單擊搜索時,會顯示活動指示符,但功能B的功能不會執行。

什麼可以解決這個問題?

請幫忙推薦

感謝

+0

你如何隱藏/顯示/動畫活動指示器?這將有助於發佈一些代碼。 – Jumhyn 2010-12-11 06:49:49

+0

您是否嘗試將其放在視圖的其他位置以查看它是否有效?也許作爲第一響應者,您的搜索欄位於您的活動指標之上。 – Julien 2010-12-11 07:32:59

回答

0

謝謝給所有的人們提供巨大的幫助和讚賞。

對不起,我不能回覆的人。

我已經得到了解決方案,它如下。

我剛剛在搜索按鈕單擊事件中寫了下面的行。

[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];

而定義的函數threadStartAnimating:如下:

-(void)threadStartAnimating:(id)data 
{ 
    [activityIndicator setHidden:NO]; 
    [activityIndicator startAnimating]; 
} 

希望這可以幫助別人。

再次感謝。

1

沒有很夠你的問題中去,而是要開始調試,我會做以下。

  1. 驗證活動是否可變地真正連線到您在IB中創建的UIActivityIndi​​cator。 (我會在setHidden:行上設置一個斷點並確保該變量不爲null,或者拋出一個NSAssert(activity,@「Whoops!actity is null」);在那裏)

  2. 如果變量是的確設置,我會開始檢查它在視圖層次結構中的正確位置。 (我會嘗試做一個[self.view addSubview:activity]並看到它出現,你可能不得不在其他地方替換它。)

  3. 你可能也想嘗試在IB中默認它,直到你把所有的東西都弄清楚了。

祝你好運。希望這可以幫助。

+0

感謝您的輸入。實際上,這是一個問題,因爲我的問題中提到了活動指示器沒有獲得所需的主線程。我編輯了我的問題。可以做什麼? – 2010-12-18 10:20:02

+0

如果你可以發佈你的viewController代碼,我可以看看。但我認爲你對線程化的擔憂可能不是問題,根據我在本頁上閱讀的所有內容,我最大的懷疑是活動指示符在視圖層次結構中錯誤的位置。 – 2010-12-24 06:09:13

0

首先,確保您的.m文件頂部有@synthesize活動。然後在viewDidLoad方法中輸入activity.hidesWhenStopped = TRUE;。接下來,在搜索開始時調用的方法中,當搜索停止時,在方法中鍵入[activity startAnimating];[activity stopAnimating];

+0

我已完成@synthesize活動。就startAnimating和stopAnimating而言,這就是我正在做的事情。關於隱藏/顯示/動畫活動指示器的問題,請參閱我上面的評論。那麼接下來我應該做什麼? – 2010-12-11 18:33:11

+0

檢查界面構建器中的任何警告。如果有的話,它們將位於.xib文件的底部。 – Jumhyn 2010-12-11 20:42:54

+0

不,即使在XIB中也沒有任何警告。實際上問題似乎是因爲活動指示符沒有得到所需的主線程,正如我在我的問題中提到的那樣。我編輯了我的問題。可以做什麼? – 2010-12-18 10:22:17

0

試試這個:

設置hidesWhenStopped = NO,以便顯示所有的時間,然後隱藏和手動證明這一點。但是視圖應該先在IB中設置爲隱藏。

- (void)startActivityView { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    activity_view.hidden = NO; 
    [pool drain]; 
} 

- (void)stopActivityView { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    activity_view.hidden = YES; 
    [pool drain]; 
} 

- (void)doSomething { 
    [self performSelectorInBackground:@selector(startActivityView) withObject:nil]; 
    // do some time consuming work 
    [self performSelectorInBackground:@selector(stopActivityView) withObject:nil]; 
} 
+0

thani iPortable我會檢查你的解決方案:) – 2010-12-19 12:50:25

+0

不起作用!顯示視圖時顯示活動指示器。這不是必需的。它應該只在點擊搜索時顯示。即使我試圖隱藏它viewWillAppear,但仍然顯示時出現視圖。我該怎麼辦? – 2010-12-20 04:39:16

+0

在IB中設置隱藏屬性或者在viewWillAppear中運行stopActivityView,而不是簡單地將隱藏屬性設置爲NO – 2010-12-20 08:20:56

1

保存自己創建自定義活動的指標,並使用標準一個是可供您已經的麻煩 - 在最上面一欄。另外,海事組織的用戶傾向於期望有人在發生事故時旋轉。

UIApplication* app = [UIApplication sharedApplication]; 
app.networkActivityIndicatorVisible = YES; 

顯然,當您的活動結束時將其設置爲NO。

+0

網絡活動指示器確實只應用於網絡活動。如果PARTH在本地數據庫中搜索,則網絡活動指示符不合適。 – 2011-01-23 13:05:32

0

也許您在活動指示燈前有一個視圖?如果你總是把它帶到前面....

loadView = [[UIActivityIndicatorView alloc] 
      initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
loadView.frame = CGRectMake(0.0, 0.0, 40.0, 40.0); 
loadView.center = window.center; 
loadView.opaque = NO; 
[window addSubview: loadView]; 
[window bringSubviewToFront:loadView]; 
[loadView startAnimating]; 
0

我建議你使用DSActivityView爲您展示活動的指標。源代碼可在Dejal blog找到。

顯示和隱藏活動視圖是一行簡單的代碼。

[DSActivityView activityViewForView:self.view];

0

開始的動畫活動的指標,並用0.1或0.2的延遲就叫ü希望其他方法....我想,它是爲我工作....

相關問題