Несколько PickerViews в одном Представлении?

Я использовал автономный метод построения plotly.offline.iplot, который не требует привязки к сетке. Единственный недостаток анимации с гистограммами - это то, что переходы в настоящее время не поддерживаются.

Код ниже (включая кнопки и ползунок):

from plotly.offline import init_notebook_mode, iplot
from IPython.display import display, HTML

init_notebook_mode(connected = True)

years = ['2010', '2011', '2012']
items = ['A', 'B', 'C', 'D']
count = [
  [1, 2, 3, 4],
  [2, 3, 4, 1],
  [3, 4, 1, 2]
]

figure = {
  'data': [{
    'type': 'bar',
    'x': items,
    'y': count[0]
  }],
  'layout': {
    'xaxis': {
      'title': 'X',
      'gridcolor': '#FFFFFF',
      'linecolor': '#000',
      'linewidth': 1,
      'zeroline': False,
      'autorange': False
    },
    'yaxis': {
      'title': 'Y',
      'gridcolor': '#FFFFFF',
      'linecolor': '#000',
      'linewidth': 1,
      'range': [0, 5],
      'autorange': False
    },
    'title': 'Example Title',
    'hovermode': 'closest',
    'updatemenus': [{
      'type': 'buttons',
      'buttons': [{
          'label': 'Play',
          'method': 'animate',
          'args': [None, {
            'frame': {
              'duration': 500,
              'redraw': True
            },
            'fromcurrent': True,
            'transition': {
              'duration': 300,
              'easing': 'quadratic-in-out'
            }
          }]
        },
        {
          'label': 'End',
          'method': 'animate',
          'args': [None, {
            'frame': {
              'duration': 0,
              'redraw': True
            },
            'fromcurrent': True,
            'mode': 'immediate',
            'transition': {
              'duration': 0
            }
          }]
        }
      ],
      'direction': 'left',
      'pad': {
        'r': 10,
        't': 87
      },
      'showactive': False,
      'type': 'buttons',
      'x': 0.1,
      'xanchor': 'right',
      'y': 0,
      'yanchor': 'top'
    }]
  },
  'frames': []
}

sliders_dict = {
  'active': 0,
  'yanchor': 'top',
  'xanchor': 'left',
  'currentvalue': {
    'font': {
      'size': 20
    },
    'prefix': 'Year:',
    'visible': True,
    'xanchor': 'right'
  },
  'transition': {
    'duration': 300,
    'easing': 'cubic-in-out'
  },
  'pad': {
    'b': 10,
    't': 50
  },
  'len': 0.9,
  'x': 0.1,
  'y': 0,
  'steps': []
}

for index, year in enumerate(years):
    frame = {
        'data': [{
          'type': 'bar',
          'x': items,
          'y': count[index]
        }],
        'name': str(year)
        }
    figure['frames'].append(frame)

    slider_step = {
      'args': [
        [year],
        {
          'frame': {
            'duration': 300,
            'redraw': True
          },
          'mode': 'immediate',
          'transition': {
            'duration': 300
          }
        }
      ],
      'label': year,
      'method': 'animate'
    }
    sliders_dict['steps'].append(slider_step)

figure['layout']['sliders'] = [sliders_dict]

iplot(figure)
21
задан CC. 20 April 2009 в 11:16
поделиться

2 ответа

Обратите внимание, что каждый метод как источника данных, так и протоколов делегатов содержит параметр UIPickerView * , например:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

Вам нужно использовать его для различения двух ваших экземпляров, как показано ниже:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{

    if([pickerView isEqual: pickerOne]){
      // return the appropriate number of components, for instance
         return 3;
    }

    if([pickerView isEqual: pickerTwo]){
      // return the appropriate number of components, for instance
         return 4;
    }
}
31
ответ дан 29 November 2019 в 20:18
поделиться

Самый простой способ сделать это - использовать свойство tag объекта pickerView. Я обычно определяю их в заголовке для удобства чтения. Вы можете установить тег в Интерфейсном Разработчике или в коде.

#define kPickerOne 0
#define kPickerTwo 1

Затем в вашем файле реализации ...

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{
     if(pickerView.tag == kPickerOne)
     {
          // do something with picker one
     }
     else if(pickerView.tag == kPickerTwo)
     {
          // the other picker
     }
}
15
ответ дан 29 November 2019 в 20:18
поделиться