2013-09-04 4 views
3

Мне нужно получить массив всех подзонов в UIScrollView. Сейчас я используюПолучение всех подзаголовков для UIScrollView

NSArray *subviews = [myScrollView subviews]; 

, но это, кажется, возвращается только подвидов, которые видны в то время код запускается. Мне нужны все подсмотры во всей области UIScrollView, даже те, которые в настоящее время скрыты (как в выключенном экране). Как я получу это?

По существу, я ищу что-то вроде contentSize свойства UIScrollView, за исключением того, вместо возврата только размера UIScrollView, если бы это было достаточно большими, чтобы отобразить все его содержание, я хочу, чтобы вернуть само содержание ,

EDIT: Я думаю, что я понял это: просмотр прокрутки, на котором это не работает, на самом деле является UITableView - и я думаю, что он деканирует ячейки, которые отключены от меня, и именно поэтому они показывается. Я собираюсь сделать некоторые тесты для подтверждения.

+0

Этот код должен работать. Как/когда эти представления добавляются в представление прокрутки? –

+1

Subviews отвечает на все просмотры, видимые или нет. Фактически, нормальный вопрос по этому вопросу заключается в том, что subviews отвечает на _too many_ subviews, включая индикаторы прокрутки. Пожалуйста, напишите код, в котором вы думаете, что добавляете больше, чем получение. – danh

+0

Ваши правильные изменения. Как только ячейка выключена, она удаляется из прокрутки и помещается в очередь повторного использования. –

ответ

3

Т.Л., др

Оказывается, что

NSArray *subviews = [myScrollView subviews]; 

действительно возвращает все подвидов в UIScrollView *myScrollView, даже если они находятся за пределами экрана.


ПОДРОБНО.Подробнее

Проблема я был на самом деле имея в том, что вид прокрутки я пытался использовать это на самом деле был UITableView, и когда в UITableViewUITableViewCell выходит за пределы экрана, он фактически удаляется из UITableView - поэтому к тому времени, когда я звонил subviews, ячейки, которые я искал, больше не были в списке прокрутки.

Мое обходное решение состояло в том, чтобы построить все мои UITableViewCell s в отдельном методе, вызванном моим viewDidLoad, а затем поместить все эти ячейки в массив. Затем, вместо использования subviews, я просто использовал этот массив. Разумеется, делать это так немного ухудшает производительность (в cellForRowAtIndexPath вы просто возвращаете ячейку из массива, которая медленнее, чем обычно используется метод dequeueReusableCellWithIdentifier), но это был единственный способ найти поведение Мне было нужно.

7

Попробуйте использовать следующий код для меня.

for(UIView * subView in myScrollView.subviews) // here write Name of you ScrollView. 
{ 
    // Here You can Get all subViews of your myScrollView. 
    // But For Check subview is specific UIClass such like label, button, textFiled etc.. write following code (here checking for example UILabel class). 

     if([subView isKindOfClass:[UILabel class]]) // Check is SubView Class Is UILabel class? 
     { 
      // You can write code here for your UILabel; 
     } 
} 
+0

Спасибо за быстрый ответ, но я не думаю, что вы понимаете, что я прошу. Мне не нужна помощь в том, как использовать subviews, как только я их найду, мне нужна помощь в получении всех подзонов - даже если они в настоящее время «выключены». – GeneralMike

+0

Я просто попробовал это, и он должен вернуть все подзаголовки. Свойство subviews наследуется от UIView и не относится к UIScrollView. Откуда вы знаете, что вы не получаете все подзаголовки? –

Смежные вопросы