Прымацаванне прослушиватель падзей

Я толькі што скончыў стварэнне старанна генерыруюцца сетак абразкоў (imageViews) і зараз мне трэба, каб быць у стане зрабіць што-то з імі. Тое, што я знаходжу, аднак, з'яўляецца тое, што слухач падзей я спрабую звязаць не атрымлівае звязаны. Аконныя нагрузкі, мае значкі адлюстроўваюцца прыгожа, але яны не з'яўляюцца інтэрактыўнымі.

Можа хто-небудзь убачыць, што я не хапае? Прыведзены ніжэй код ўяўляе сабой поўнафункцыянальны файл (для той часткі, якая не функцыянуе, акрамя). Вы павінны быць у стане скапіяваць яго ў выпрабавальным прыкладанне і загрузіць яго прама (можа быць iPhone толькі ў дадзены момант).

Любое разуменне будзе высока цэніцца.

// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Ti.UI.setBackgroundColor('#000');

//
// create base UI tab and root window
//
var win = Ti.UI.createWindow({  
    backgroundColor:'#fff',
    layout: 'vertical',
    navBarHidden: true,
});

// icon grid
var icons = [
    { image: '/images/ico_generic.png', label: 'Hospital Locations', url: 'http://google.com' },
    { image: '/images/ico_generic.png', label: 'Tobacco Free Campus', url: 'http:://robwilkerson.org' },
    { image: '/images/ico_generic.png', label: 'ER Wait Times', url: 'http://letmegooglethatforyou.com' },
    { image: '/images/ico_generic.png', label: 'Make a Donation', url: 'http://flickr.com/photos/robwilkerson' },
    { image: '/images/ico_generic.png', label: 'Condition Search', url: 'http://facebook.com' },
    { image: '/images/ico_generic.png', label: 'Video Library', url: 'http://google.com/reader' },
    { image: '/images/ico_generic.png', label: 'Financial Help', url: 'http://stackoverflow.com' },
    { image: '/images/ico_generic.png', label: 'Patient Forms', url: 'http://github.com' }
];

// put the grid in a scrollable view
var iconGrid = Ti.UI.createScrollView({
    layout: 'vertical',
});

// incoming properties we want customizable
var cols    = 3;
var icoW    = 57;
var icoH    = 57;

// Grid
var xSpacer    = 10;//horizontal space b/t icons
var ySpacer    = 10;//vertical space b/t icons
var rows       = Math.ceil( icons.length/cols );//how many rows?
// Container width = 1/3 of the viewport minus the icon widths and spacers
var containerW = Math.floor( ( Ti.Platform.displayCaps.platformWidth - ( xSpacer * ( cols + 1 ) ) )/3 );
// Container height = icon height + label spacer + label height
var containerH = icoH + ySpacer + 15;
// Row height = icon height + top spacer + bottom spacer + label spacer + 15 (label height)
var rowH       = containerH + ( 2 * ySpacer );

// Incrementing values
var i = 0;
var viewHeight = 0;

for( var y = 0; y < rows; y++ ) {
    var thisRow = Ti.UI.createView({
        className: 'grid',
        layout: 'horizontal',
        height: rowH,
        touchEnabled: false,
    });

    viewHeight += rowH;

    for( var x = 0; x < cols && i < icons.length; x++ ) {
        var container = Ti.UI.createView({
            left: xSpacer,
            height: containerH,
            top: ySpacer,
            width: containerW,
        });
        var icon = Ti.UI.createImageView({
            left: ( containerW - icoW )/2,
            height: icoH,
            image: icons[i].image,
            top: 0,
            width: icoW,
        });
        var label = Ti.UI.createLabel({
           //borderColor: '#00f',
            font: { fontSize: 12 },
            height: 15,
            text: icons[i].label,
            textAlign: 'center',
            top: icoH + ySpacer,
            width: containerW,
        });

        icon.addEventListener( 'click', function( e ) {
            alert( 'Icon ' + i + ' was clicked' );d
        });

        container.add( icon );
        container.add( label );
        thisRow.add( container );
        i++;
    }

    iconGrid.add( thisRow );
    iconGrid.height = viewHeight;
}

win.add( iconGrid );
win.open();
0
Упс. Гэта проста памылка друку. Я знайшоў рашэнне (гэта была праблема мяне), таму я напішу, што пасля трохі больш выпрабаванняў. Дзякуючы.
дададзена аўтар Rob Wilkerson, крыніца
што пра «D» у вашым выпадку кліку? Ці гэта прычына няўдачы?
дададзена аўтар mkind, крыніца

3 адказы

Гэта адна на мне. У маім працэсе навучання, я прайшоў праз некалькі розных рашэнняў для адлюстравання сеткі абразкоў. У адным з ранніх ітэрацый, мне прыйшлося адключыць кантакт для радка (гэта быў Tableview спробы). Некалькі ітэрацый праз я атрымаў права паказу, але адключыць сэнсарны доступ на шэраг забіў маю здольнасць «пстрыкнуць» абразок.

Я быў так далёка ўніз па дарозе, што я нават не разумеў, што маёмасць па-ранейшаму была на месцы, пакуль новы набор вока не паказаў мне на гэта. Пасля таго, як я выдаліў гэтую ўласнасць на thisRow , слухачы падзей атрымалі звязаныя правільна.

0
дададзена

Я дадаю некаторыя радкі кода. Тое, што я зрабіў, як ствараецца сетка малюнкаў і пры націску кнопкі, вы зможаце да гэтай выявы.

<Р> {       "Цела": [           {               «Тып»: «фота»,               "Парадак": 1,               "Фатаграфіі": [                   {                       "Драбніца": "http://www.flower.com/version_2.0/files/photos/thumbnails/745178756-_-1331130219.jpg",                       "Фота": "http://www.flower.com/version_2.0/files/photos/745178756-_-1331130219.jpg"                   },                   {                       "Драбніца": "http://www.flower.com/version_2.0/files/photos/thumbnails/58062938-_-1337463040.jpg",                       "Фота": "http://www.flower.com/version_2.0/files/photos/58062938-_-1337463040.jpg"                   },                   {                       "Драбніца": "http://www.flower.com/version_2.0/files/photos/thumbnails/1368715237-_-1337463149.jpg",                       "Фота": "HTTP: //www.flower.comversion_2.0/files/photos/1368715237-_-1337463149.jpg"                   },                ]           },       ],       "Статус": праўда

     <Р>}

Гэта быў адказ, які я атрымліваю ад сервера.

Цяпер раблю яго ў сетцы і інтэрактыўных малюнка, я збіраюся ўставіць код ніжэй. Заўвага сетка робіцца для 320 шырыні рха.

var xhr = Ti.Network.createHTTPClient({
onload : function(e) {

  var response = JSON.parse(this.responseText);
  var myObjectString = JSON.stringify(response);
  Titanium.API.info('myObjectString--->: ' + myObjectString) 
    var myArray = response.body; 
    var objectArray = [];
  var k = 5;  
for (var i = 0; i < myArray[0].photos.length/5; i++)         { 
                  var l = 0+i*5;          var m = 0           for (var j = l; j < k; j++)             {

                  var thumb = Ti.UI.createImageView({  
                      image:myArray[0].photos[j].thumbnail, 
                      largeImage:myArray[0].photos[j].photo,
                      height:60,
                      tag:j,
                      width:60, 
                      top:5*(i+1)+60*i,
                      left:3*(m+1)+60*m, 
                  });
                  objectArray.push(thumb);
                   m++;
                  scroll.add(thumb); 
                  thumb.addEventListener('click' ,function(e)
                   {

                       for(var i =0;i
0
дададзена

Можна таксама ўжыць прослушиватель падзей «Від» сам па сабе. Прычына ў тым, што калі вы ўвесь час дадаваць адзін і той жа слухач падзей для кожнага пункту гледжання, вы будзеце выклікаць памяць прылады станавіцца ўсё менш і менш, асабліва ў тых выпадках, калі вы будзеце мець большы набор дадзеных.

Мая прапанова да вас гэта: Дадайце сваю ўласнасць да ImageView, як «ID» ці нешта. Дык нешта накшталт:

Ti.UI.createImageView({image: 'path/to/image.png', id: 'array_key'});

Пасля таго, як вы зрабілі гэта, вы можаце дадаць прослушиватель падзей да бацькоўскага думку, у гэтым выпадку ваш ImageView.

view.addEventListener('click', function(e) {
   alert(e.source.id + ' was clicked');
});

Такім чынам, у вас ёсць адзін слухач падзей, які можа апрацоўваць ўсе ImageView падзеі.

0
дададзена
Вялікі дзякуй. Гэты адказ дапамог мне ..
дададзена аўтар Alan, крыніца